; ModuleID = 'pmd.c'
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-f128:128:128-n8:16:32:64"
target triple = "x86_64-unknown-linux-gnu"

%struct.FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct.FILE*, i32, i32, i64, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i8*, i8*, i64, i32, [20 x i8] }
%struct.MPI_Status = type { i32, i32, i32, i32, i32 }
%struct._IO_marker = type { %struct._IO_marker*, %struct.FILE*, i32 }

@vproc = unnamed_addr global [3 x i32] [i32 2, i32 2, i32 2]
@nproc = unnamed_addr global i32 8
@sid = common unnamed_addr global i32 0
@vid = common unnamed_addr global [3 x i32] zeroinitializer
@stepCount = common unnamed_addr global i32 0
@StepAvg = common unnamed_addr global i32 0
@StepLimit = common unnamed_addr global i32 0
@cpu = common unnamed_addr global double 0.000000e+00
@allreduce = common unnamed_addr global double 0.000000e+00
@comt = common unnamed_addr global double 0.000000e+00
@.str = private unnamed_addr constant [38 x i8] c"CPU & COMT & ALLREDUCE = %le %le %le\0A\00", align 8
@.str1 = private unnamed_addr constant [7 x i8] c"pmd.in\00", align 1
@.str2 = private unnamed_addr constant [2 x i8] c"r\00", align 1
@.str3 = private unnamed_addr constant [7 x i8] c"%d%d%d\00", align 1
@InitUcell = common unnamed_addr global [3 x i32] zeroinitializer
@.str4 = private unnamed_addr constant [4 x i8] c"%le\00", align 1
@Density = common unnamed_addr global double 0.000000e+00
@InitTemp = common unnamed_addr global double 0.000000e+00
@DeltaT = common unnamed_addr global double 0.000000e+00
@.str5 = private unnamed_addr constant [3 x i8] c"%d\00", align 1
@DeltaTH = common unnamed_addr global double 0.000000e+00
@al = common unnamed_addr global [3 x double] zeroinitializer, align 16
@.str6 = private unnamed_addr constant [15 x i8] c"al = %e %e %e\0A\00", align 1
@lc = common unnamed_addr global [3 x i32] zeroinitializer
@rc = common unnamed_addr global [3 x double] zeroinitializer, align 16
@.str7 = private unnamed_addr constant [15 x i8] c"lc = %d %d %d\0A\00", align 1
@.str8 = private unnamed_addr constant [15 x i8] c"rc = %e %e %e\0A\00", align 1
@Uc = common unnamed_addr global double 0.000000e+00
@Duc = common unnamed_addr global double 0.000000e+00
@C.23.6129 = private unnamed_addr constant [6 x [3 x i32]] [[3 x i32] [i32 -1, i32 0, i32 0], [3 x i32] [i32 1, i32 0, i32 0], [3 x i32] [i32 0, i32 -1, i32 0], [3 x i32] [i32 0, i32 1, i32 0], [3 x i32] [i32 0, i32 0, i32 -1], [3 x i32] [i32 0, i32 0, i32 1]]
@nn = common unnamed_addr global [6 x i32] zeroinitializer, align 16
@sv = common unnamed_addr global [6 x [3 x double]] zeroinitializer, align 32
@myparity = common unnamed_addr global [3 x i32] zeroinitializer
@C.41.6229 = private unnamed_addr constant [4 x [3 x double]] [[3 x double] zeroinitializer, [3 x double] [double 0.000000e+00, double 5.000000e-01, double 5.000000e-01], [3 x double] [double 5.000000e-01, double 0.000000e+00, double 5.000000e-01], [3 x double] [double 5.000000e-01, double 5.000000e-01, double 0.000000e+00]]
@n = common unnamed_addr global i32 0
@r = common unnamed_addr global [200000 x [3 x double]] zeroinitializer, align 32
@nglob = common unnamed_addr global i32 0
@.str9 = private unnamed_addr constant [12 x i8] c"nglob = %d\0A\00", align 1
@rv = common unnamed_addr global [200000 x [3 x double]] zeroinitializer, align 32
@ra = common unnamed_addr global [100000 x [3 x double]] zeroinitializer, align 32
@lsb = common unnamed_addr global [6 x [100000 x i32]] zeroinitializer, align 32
@status = common unnamed_addr global %struct.MPI_Status zeroinitializer, align 16
@dbuf = common unnamed_addr global [300000 x double] zeroinitializer, align 32
@dbufr = common unnamed_addr global [300000 x double] zeroinitializer, align 32
@nb = common unnamed_addr global i32 0
@head = common unnamed_addr global [100000 x i32] zeroinitializer, align 32
@lscl = common unnamed_addr global [200000 x i32] zeroinitializer, align 32
@potEnergy = common unnamed_addr global double 0.000000e+00
@kinEnergy = common unnamed_addr global double 0.000000e+00
@totEnergy = common unnamed_addr global double 0.000000e+00
@temperature = common unnamed_addr global double 0.000000e+00
@.str10 = private unnamed_addr constant [25 x i8] c"%9.6f %9.6f %9.6f %9.6f\0A\00", align 1
@request = common unnamed_addr global i32 0

define double @SignR(double %v, double %x) nounwind {
entry:
  %v_addr = alloca double, align 8
  %x_addr = alloca double, align 8
  %retval = alloca double
  %0 = alloca double
  %"alloca point" = bitcast i32 0 to i32
  store double %v, double* %v_addr
  store double %x, double* %x_addr
  %1 = load double* %x_addr, align 8
  %2 = fcmp ogt double %1, 0.000000e+00
  br i1 %2, label %bb, label %bb1

bb:                                               ; preds = %entry
  %3 = load double* %v_addr, align 8
  store double %3, double* %0, align 8
  br label %bb2

bb1:                                              ; preds = %entry
  %4 = load double* %v_addr, align 8
  %5 = fsub double -0.000000e+00, %4
  store double %5, double* %0, align 8
  br label %bb2

bb2:                                              ; preds = %bb1, %bb
  %6 = load double* %0, align 8
  store double %6, double* %retval, align 8
  br label %return

return:                                           ; preds = %bb2
  %retval3 = load double* %retval
  ret double %retval3
}

define double @Dmod(double %a, double %b) nounwind {
entry:
  %a_addr = alloca double, align 8
  %b_addr = alloca double, align 8
  %retval = alloca double
  %0 = alloca double
  %n = alloca i32
  %"alloca point" = bitcast i32 0 to i32
  store double %a, double* %a_addr
  store double %b, double* %b_addr
  %1 = load double* %a_addr, align 8
  %2 = load double* %b_addr, align 8
  %3 = fdiv double %1, %2
  %4 = fptosi double %3 to i32
  store i32 %4, i32* %n, align 4
  %5 = load i32* %n, align 4
  %6 = sitofp i32 %5 to double
  %7 = load double* %b_addr, align 8
  %8 = fmul double %6, %7
  %9 = load double* %a_addr, align 8
  %10 = fsub double %9, %8
  store double %10, double* %0, align 8
  %11 = load double* %0, align 8
  store double %11, double* %retval, align 8
  br label %return

return:                                           ; preds = %entry
  %retval1 = load double* %retval
  ret double %retval1
}

define double @RandR(double* %seed) nounwind {
entry:
  %seed_addr = alloca double*, align 8
  %retval = alloca double
  %0 = alloca double
  %"alloca point" = bitcast i32 0 to i32
  store double* %seed, double** %seed_addr
  %1 = load double** %seed_addr, align 8
  %2 = load double* %1, align 8
  %3 = fmul double %2, 1.680700e+04
  %4 = call double @Dmod(double %3, double 0x41DFFFFFFFC00000) nounwind
  %5 = load double** %seed_addr, align 8
  store double %4, double* %5, align 8
  %6 = load double** %seed_addr, align 8
  %7 = load double* %6, align 8
  %8 = fdiv double %7, 0x41DFFFFFFFC00000
  store double %8, double* %0, align 8
  %9 = load double* %0, align 8
  store double %9, double* %retval, align 8
  br label %return

return:                                           ; preds = %entry
  %retval1 = load double* %retval
  ret double %retval1
}

define void @RandVec3(double* %p, double* %seed) nounwind {
entry:
  %p_addr = alloca double*, align 8
  %seed_addr = alloca double*, align 8
  %x = alloca double
  %y = alloca double
  %s = alloca double
  %"alloca point" = bitcast i32 0 to i32
  store double* %p, double** %p_addr
  store double* %seed, double** %seed_addr
  store double 2.000000e+00, double* %s, align 8
  br label %bb1

bb:                                               ; preds = %bb1
  %0 = load double** %seed_addr, align 8
  %1 = call double @RandR(double* %0) nounwind
  %2 = fmul double %1, 2.000000e+00
  %3 = fsub double %2, 1.000000e+00
  store double %3, double* %x, align 8
  %4 = load double** %seed_addr, align 8
  %5 = call double @RandR(double* %4) nounwind
  %6 = fmul double %5, 2.000000e+00
  %7 = fsub double %6, 1.000000e+00
  store double %7, double* %y, align 8
  %8 = load double* %x, align 8
  %9 = load double* %x, align 8
  %10 = fmul double %8, %9
  %11 = load double* %y, align 8
  %12 = load double* %y, align 8
  %13 = fmul double %11, %12
  %14 = fadd double %10, %13
  store double %14, double* %s, align 8
  br label %bb1

bb1:                                              ; preds = %bb, %entry
  %15 = load double* %s, align 8
  %16 = fcmp ogt double %15, 1.000000e+00
  br i1 %16, label %bb, label %bb2

bb2:                                              ; preds = %bb1
  %17 = load double* %s, align 8
  %18 = fmul double %17, -2.000000e+00
  %19 = fadd double %18, 1.000000e+00
  %20 = load double** %p_addr, align 8
  %21 = getelementptr inbounds double* %20, i64 2
  store double %19, double* %21, align 1
  %22 = load double* %s, align 8
  %23 = fsub double 1.000000e+00, %22
  %24 = call double @sqrt(double %23) nounwind readonly
  %25 = fmul double %24, 2.000000e+00
  store double %25, double* %s, align 8
  %26 = load double* %s, align 8
  %27 = load double* %x, align 8
  %28 = fmul double %26, %27
  %29 = load double** %p_addr, align 8
  %30 = getelementptr inbounds double* %29, i64 0
  store double %28, double* %30, align 1
  %31 = load double* %s, align 8
  %32 = load double* %y, align 8
  %33 = fmul double %31, %32
  %34 = load double** %p_addr, align 8
  %35 = getelementptr inbounds double* %34, i64 1
  store double %33, double* %35, align 1
  br label %return

return:                                           ; preds = %bb2
  ret void
}

declare double @sqrt(double) nounwind readonly

define i32 @main(i32 %argc, i8** %argv) nounwind {
entry:
  %argc_addr = alloca i32, align 4
  %argv_addr = alloca i8**, align 8
  %retval = alloca i32
  %0 = alloca i32
  %cpu1 = alloca double
  %"alloca point" = bitcast i32 0 to i32
  store i32 %argc, i32* %argc_addr
  store i8** %argv, i8*** %argv_addr
  %1 = call i32 @MPI_Init(i32* %argc_addr, i8*** %argv_addr) nounwind
  %2 = call i32 @MPI_Comm_rank(i32 1140850688, i32* @sid) nounwind
  %3 = load i32* @sid, align 4
  %4 = load i32* getelementptr inbounds ([3 x i32]* @vproc, i64 0, i64 1), align 4
  %5 = load i32* getelementptr inbounds ([3 x i32]* @vproc, i64 0, i64 2), align 4
  %6 = mul nsw i32 %4, %5
  %7 = sdiv i32 %3, %6
  store i32 %7, i32* getelementptr inbounds ([3 x i32]* @vid, i64 0, i64 0), align 4
  %8 = load i32* @sid, align 4
  %9 = load i32* getelementptr inbounds ([3 x i32]* @vproc, i64 0, i64 2), align 4
  %10 = sdiv i32 %8, %9
  %11 = load i32* getelementptr inbounds ([3 x i32]* @vproc, i64 0, i64 1), align 4
  %12 = srem i32 %10, %11
  store i32 %12, i32* getelementptr inbounds ([3 x i32]* @vid, i64 0, i64 1), align 4
  %13 = load i32* @sid, align 4
  %14 = load i32* getelementptr inbounds ([3 x i32]* @vproc, i64 0, i64 2), align 4
  %15 = srem i32 %13, %14
  store i32 %15, i32* getelementptr inbounds ([3 x i32]* @vid, i64 0, i64 2), align 4
  call void (...)* bitcast (void ()* @init_params to void (...)*)() nounwind
  call void (...)* bitcast (void ()* @set_topology to void (...)*)() nounwind
  call void (...)* bitcast (void ()* @init_conf to void (...)*)() nounwind
  call void (...)* bitcast (void ()* @atom_copy to void (...)*)() nounwind
  call void (...)* bitcast (void ()* @compute_accel to void (...)*)() nounwind
  %16 = call double @MPI_Wtime() nounwind
  store double %16, double* %cpu1, align 8
  store i32 1, i32* @stepCount, align 4
  br label %bb3

bb:                                               ; preds = %bb3
  call void (...)* bitcast (void ()* @single_step to void (...)*)() nounwind
  %17 = load i32* @stepCount, align 4
  %18 = load i32* @StepAvg, align 4
  %19 = srem i32 %17, %18
  %20 = icmp eq i32 %19, 0
  br i1 %20, label %bb1, label %bb2

bb1:                                              ; preds = %bb
  call void (...)* bitcast (void ()* @eval_props to void (...)*)() nounwind
  br label %bb2

bb2:                                              ; preds = %bb1, %bb
  %21 = load i32* @stepCount, align 4
  %22 = add nsw i32 %21, 1
  store i32 %22, i32* @stepCount, align 4
  br label %bb3

bb3:                                              ; preds = %bb2, %entry
  %23 = load i32* @stepCount, align 4
  %24 = load i32* @StepLimit, align 4
  %25 = icmp sle i32 %23, %24
  br i1 %25, label %bb, label %bb4

bb4:                                              ; preds = %bb3
  %26 = call double @MPI_Wtime() nounwind
  %27 = load double* %cpu1, align 8
  %28 = fsub double %26, %27
  store double %28, double* @cpu, align 8
  %29 = load i32* @sid, align 4
  %30 = icmp eq i32 %29, 0
  br i1 %30, label %bb5, label %bb6

bb5:                                              ; preds = %bb4
  %31 = load double* @allreduce, align 8
  %32 = load double* @comt, align 8
  %33 = load double* @cpu, align 8
  %34 = call i32 (i8*, ...)* @printf(i8* noalias getelementptr inbounds ([38 x i8]* @.str, i64 0, i64 0), double %33, double %32, double %31) nounwind
  br label %bb6

bb6:                                              ; preds = %bb5, %bb4
  %35 = call i32 @MPI_Finalize() nounwind
  store i32 0, i32* %0, align 4
  %36 = load i32* %0, align 4
  store i32 %36, i32* %retval, align 4
  br label %return

return:                                           ; preds = %bb6
  %retval7 = load i32* %retval
  ret i32 %retval7
}

declare i32 @MPI_Init(i32*, i8***)

declare i32 @MPI_Comm_rank(i32, i32*)

declare double @MPI_Wtime()

declare i32 @printf(i8* noalias, ...) nounwind

declare i32 @MPI_Finalize()

define void @init_params() nounwind {
entry:
  %a = alloca i32
  %rr = alloca double
  %ri2 = alloca double
  %ri6 = alloca double
  %r1 = alloca double
  %fp = alloca %struct.FILE*
  %"alloca point" = bitcast i32 0 to i32
  %0 = call %struct.FILE* @fopen(i8* noalias getelementptr inbounds ([7 x i8]* @.str1, i64 0, i64 0), i8* noalias getelementptr inbounds ([2 x i8]* @.str2, i64 0, i64 0)) nounwind
  store %struct.FILE* %0, %struct.FILE** %fp, align 8
  %1 = load %struct.FILE** %fp, align 8
  %2 = call i32 (%struct.FILE*, i8*, ...)* @"\01__isoc99_fscanf"(%struct.FILE* noalias %1, i8* noalias getelementptr inbounds ([7 x i8]* @.str3, i64 0, i64 0), i32* getelementptr inbounds ([3 x i32]* @InitUcell, i64 0, i64 0), i32* getelementptr inbounds ([3 x i32]* @InitUcell, i64 0, i64 1), i32* getelementptr inbounds ([3 x i32]* @InitUcell, i64 0, i64 2)) nounwind
  %3 = load %struct.FILE** %fp, align 8
  %4 = call i32 (%struct.FILE*, i8*, ...)* @"\01__isoc99_fscanf"(%struct.FILE* noalias %3, i8* noalias getelementptr inbounds ([4 x i8]* @.str4, i64 0, i64 0), double* @Density) nounwind
  %5 = load %struct.FILE** %fp, align 8
  %6 = call i32 (%struct.FILE*, i8*, ...)* @"\01__isoc99_fscanf"(%struct.FILE* noalias %5, i8* noalias getelementptr inbounds ([4 x i8]* @.str4, i64 0, i64 0), double* @InitTemp) nounwind
  %7 = load %struct.FILE** %fp, align 8
  %8 = call i32 (%struct.FILE*, i8*, ...)* @"\01__isoc99_fscanf"(%struct.FILE* noalias %7, i8* noalias getelementptr inbounds ([4 x i8]* @.str4, i64 0, i64 0), double* @DeltaT) nounwind
  %9 = load %struct.FILE** %fp, align 8
  %10 = call i32 (%struct.FILE*, i8*, ...)* @"\01__isoc99_fscanf"(%struct.FILE* noalias %9, i8* noalias getelementptr inbounds ([3 x i8]* @.str5, i64 0, i64 0), i32* @StepLimit) nounwind
  %11 = load %struct.FILE** %fp, align 8
  %12 = call i32 (%struct.FILE*, i8*, ...)* @"\01__isoc99_fscanf"(%struct.FILE* noalias %11, i8* noalias getelementptr inbounds ([3 x i8]* @.str5, i64 0, i64 0), i32* @StepAvg) nounwind
  %13 = load %struct.FILE** %fp, align 8
  %14 = call i32 @fclose(%struct.FILE* %13) nounwind
  %15 = load double* @DeltaT, align 8
  %16 = fmul double %15, 5.000000e-01
  store double %16, double* @DeltaTH, align 8
  store i32 0, i32* %a, align 4
  br label %bb1

bb:                                               ; preds = %bb1
  %17 = load i32* %a, align 4
  %18 = load i32* %a, align 4
  %19 = sext i32 %18 to i64
  %20 = getelementptr inbounds [3 x i32]* @InitUcell, i64 0, i64 %19
  %21 = load i32* %20, align 4
  %22 = sitofp i32 %21 to double
  %23 = load double* @Density, align 8
  %24 = fdiv double %23, 4.000000e+00
  %25 = call double @llvm.pow.f64(double %24, double 0x3FD5555555555555)
  %26 = fdiv double %22, %25
  %27 = sext i32 %17 to i64
  %28 = getelementptr inbounds [3 x double]* @al, i64 0, i64 %27
  store double %26, double* %28, align 8
  %29 = load i32* %a, align 4
  %30 = add nsw i32 %29, 1
  store i32 %30, i32* %a, align 4
  br label %bb1

bb1:                                              ; preds = %bb, %entry
  %31 = load i32* %a, align 4
  %32 = icmp sle i32 %31, 2
  br i1 %32, label %bb, label %bb2

bb2:                                              ; preds = %bb1
  %33 = load i32* @sid, align 4
  %34 = icmp eq i32 %33, 0
  br i1 %34, label %bb3, label %bb4

bb3:                                              ; preds = %bb2
  %35 = load double* getelementptr inbounds ([3 x double]* @al, i64 0, i64 2), align 8
  %36 = load double* getelementptr inbounds ([3 x double]* @al, i64 0, i64 1), align 8
  %37 = load double* getelementptr inbounds ([3 x double]* @al, i64 0, i64 0), align 8
  %38 = call i32 (i8*, ...)* @printf(i8* noalias getelementptr inbounds ([15 x i8]* @.str6, i64 0, i64 0), double %37, double %36, double %35) nounwind
  br label %bb4

bb4:                                              ; preds = %bb3, %bb2
  store i32 0, i32* %a, align 4
  br label %bb6

bb5:                                              ; preds = %bb6
  %39 = load i32* %a, align 4
  %40 = load i32* %a, align 4
  %41 = sext i32 %40 to i64
  %42 = getelementptr inbounds [3 x double]* @al, i64 0, i64 %41
  %43 = load double* %42, align 8
  %44 = fdiv double %43, 2.500000e+00
  %45 = fptosi double %44 to i32
  %46 = sext i32 %39 to i64
  %47 = getelementptr inbounds [3 x i32]* @lc, i64 0, i64 %46
  store i32 %45, i32* %47, align 4
  %48 = load i32* %a, align 4
  %49 = load i32* %a, align 4
  %50 = sext i32 %49 to i64
  %51 = getelementptr inbounds [3 x double]* @al, i64 0, i64 %50
  %52 = load double* %51, align 8
  %53 = load i32* %a, align 4
  %54 = sext i32 %53 to i64
  %55 = getelementptr inbounds [3 x i32]* @lc, i64 0, i64 %54
  %56 = load i32* %55, align 4
  %57 = sitofp i32 %56 to double
  %58 = fdiv double %52, %57
  %59 = sext i32 %48 to i64
  %60 = getelementptr inbounds [3 x double]* @rc, i64 0, i64 %59
  store double %58, double* %60, align 8
  %61 = load i32* %a, align 4
  %62 = add nsw i32 %61, 1
  store i32 %62, i32* %a, align 4
  br label %bb6

bb6:                                              ; preds = %bb5, %bb4
  %63 = load i32* %a, align 4
  %64 = icmp sle i32 %63, 2
  br i1 %64, label %bb5, label %bb7

bb7:                                              ; preds = %bb6
  %65 = load i32* @sid, align 4
  %66 = icmp eq i32 %65, 0
  br i1 %66, label %bb8, label %bb9

bb8:                                              ; preds = %bb7
  %67 = load i32* getelementptr inbounds ([3 x i32]* @lc, i64 0, i64 2), align 4
  %68 = load i32* getelementptr inbounds ([3 x i32]* @lc, i64 0, i64 1), align 4
  %69 = load i32* getelementptr inbounds ([3 x i32]* @lc, i64 0, i64 0), align 4
  %70 = call i32 (i8*, ...)* @printf(i8* noalias getelementptr inbounds ([15 x i8]* @.str7, i64 0, i64 0), i32 %69, i32 %68, i32 %67) nounwind
  %71 = load double* getelementptr inbounds ([3 x double]* @rc, i64 0, i64 2), align 8
  %72 = load double* getelementptr inbounds ([3 x double]* @rc, i64 0, i64 1), align 8
  %73 = load double* getelementptr inbounds ([3 x double]* @rc, i64 0, i64 0), align 8
  %74 = call i32 (i8*, ...)* @printf(i8* noalias getelementptr inbounds ([15 x i8]* @.str8, i64 0, i64 0), double %73, double %72, double %71) nounwind
  br label %bb9

bb9:                                              ; preds = %bb8, %bb7
  store double 6.250000e+00, double* %rr, align 8
  %75 = load double* %rr, align 8
  %76 = fdiv double 1.000000e+00, %75
  store double %76, double* %ri2, align 8
  %77 = load double* %ri2, align 8
  %78 = load double* %ri2, align 8
  %79 = fmul double %77, %78
  %80 = load double* %ri2, align 8
  %81 = fmul double %79, %80
  store double %81, double* %ri6, align 8
  %82 = load double* %rr, align 8
  %83 = call double @sqrt(double %82) nounwind readonly
  store double %83, double* %r1, align 8
  %84 = load double* %ri6, align 8
  %85 = fmul double %84, 4.000000e+00
  %86 = load double* %ri6, align 8
  %87 = fsub double %86, 1.000000e+00
  %88 = fmul double %85, %87
  store double %88, double* @Uc, align 8
  %89 = load double* %ri6, align 8
  %90 = fmul double %89, -4.800000e+01
  %91 = load double* %ri6, align 8
  %92 = fsub double %91, 5.000000e-01
  %93 = fmul double %90, %92
  %94 = load double* %r1, align 8
  %95 = fdiv double %93, %94
  store double %95, double* @Duc, align 8
  br label %return

return:                                           ; preds = %bb9
  ret void
}

declare %struct.FILE* @fopen(i8* noalias, i8* noalias)

declare i32 @"\01__isoc99_fscanf"(%struct.FILE* noalias, i8* noalias, ...) nounwind

declare i32 @fclose(%struct.FILE*)

declare double @llvm.pow.f64(double, double) nounwind readonly

define void @set_topology() nounwind {
entry:
  %iv = alloca [6 x [3 x i32]]
  %ku = alloca i32
  %a = alloca i32
  %k1 = alloca [3 x i32]
  %"alloca point" = bitcast i32 0 to i32
  %iv1 = bitcast [6 x [3 x i32]]* %iv to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %iv1, i8* bitcast ([6 x [3 x i32]]* @C.23.6129 to i8*), i64 72, i32 4, i1 false)
  store i32 0, i32* %ku, align 4
  br label %bb8

bb:                                               ; preds = %bb8
  store i32 0, i32* %a, align 4
  br label %bb3

bb2:                                              ; preds = %bb3
  %0 = load i32* %a, align 4
  %1 = load i32* %a, align 4
  %2 = sext i32 %1 to i64
  %3 = getelementptr inbounds [3 x i32]* @vid, i64 0, i64 %2
  %4 = load i32* %3, align 4
  %5 = load i32* %ku, align 4
  %6 = load i32* %a, align 4
  %7 = sext i32 %5 to i64
  %8 = getelementptr inbounds [6 x [3 x i32]]* %iv, i64 0, i64 %7
  %9 = sext i32 %6 to i64
  %10 = getelementptr inbounds [3 x i32]* %8, i64 0, i64 %9
  %11 = load i32* %10, align 4
  %12 = add nsw i32 %4, %11
  %13 = load i32* %a, align 4
  %14 = sext i32 %13 to i64
  %15 = getelementptr inbounds [3 x i32]* @vproc, i64 0, i64 %14
  %16 = load i32* %15, align 4
  %17 = add nsw i32 %12, %16
  %18 = load i32* %a, align 4
  %19 = sext i32 %18 to i64
  %20 = getelementptr inbounds [3 x i32]* @vproc, i64 0, i64 %19
  %21 = load i32* %20, align 4
  %22 = srem i32 %17, %21
  %23 = sext i32 %0 to i64
  %24 = getelementptr inbounds [3 x i32]* %k1, i64 0, i64 %23
  store i32 %22, i32* %24, align 4
  %25 = load i32* %a, align 4
  %26 = add nsw i32 %25, 1
  store i32 %26, i32* %a, align 4
  br label %bb3

bb3:                                              ; preds = %bb2, %bb
  %27 = load i32* %a, align 4
  %28 = icmp sle i32 %27, 2
  br i1 %28, label %bb2, label %bb4

bb4:                                              ; preds = %bb3
  %29 = load i32* %ku, align 4
  %30 = getelementptr inbounds [3 x i32]* %k1, i64 0, i64 0
  %31 = load i32* %30, align 4
  %32 = load i32* getelementptr inbounds ([3 x i32]* @vproc, i64 0, i64 1), align 4
  %33 = mul nsw i32 %31, %32
  %34 = getelementptr inbounds [3 x i32]* %k1, i64 0, i64 1
  %35 = load i32* %34, align 4
  %36 = add nsw i32 %33, %35
  %37 = load i32* getelementptr inbounds ([3 x i32]* @vproc, i64 0, i64 2), align 4
  %38 = mul nsw i32 %36, %37
  %39 = getelementptr inbounds [3 x i32]* %k1, i64 0, i64 2
  %40 = load i32* %39, align 4
  %41 = add nsw i32 %38, %40
  %42 = sext i32 %29 to i64
  %43 = getelementptr inbounds [6 x i32]* @nn, i64 0, i64 %42
  store i32 %41, i32* %43, align 4
  store i32 0, i32* %a, align 4
  br label %bb6

bb5:                                              ; preds = %bb6
  %44 = load i32* %ku, align 4
  %45 = load i32* %a, align 4
  %46 = load i32* %a, align 4
  %47 = sext i32 %46 to i64
  %48 = getelementptr inbounds [3 x double]* @al, i64 0, i64 %47
  %49 = load double* %48, align 8
  %50 = load i32* %ku, align 4
  %51 = load i32* %a, align 4
  %52 = sext i32 %50 to i64
  %53 = getelementptr inbounds [6 x [3 x i32]]* %iv, i64 0, i64 %52
  %54 = sext i32 %51 to i64
  %55 = getelementptr inbounds [3 x i32]* %53, i64 0, i64 %54
  %56 = load i32* %55, align 4
  %57 = sitofp i32 %56 to double
  %58 = fmul double %49, %57
  %59 = sext i32 %44 to i64
  %60 = getelementptr inbounds [6 x [3 x double]]* @sv, i64 0, i64 %59
  %61 = sext i32 %45 to i64
  %62 = getelementptr inbounds [3 x double]* %60, i64 0, i64 %61
  store double %58, double* %62, align 8
  %63 = load i32* %a, align 4
  %64 = add nsw i32 %63, 1
  store i32 %64, i32* %a, align 4
  br label %bb6

bb6:                                              ; preds = %bb5, %bb4
  %65 = load i32* %a, align 4
  %66 = icmp sle i32 %65, 2
  br i1 %66, label %bb5, label %bb7

bb7:                                              ; preds = %bb6
  %67 = load i32* %ku, align 4
  %68 = add nsw i32 %67, 1
  store i32 %68, i32* %ku, align 4
  br label %bb8

bb8:                                              ; preds = %bb7, %entry
  %69 = load i32* %ku, align 4
  %70 = icmp sle i32 %69, 5
  br i1 %70, label %bb, label %bb9

bb9:                                              ; preds = %bb8
  store i32 0, i32* %a, align 4
  br label %bb16

bb10:                                             ; preds = %bb16
  %71 = load i32* %a, align 4
  %72 = sext i32 %71 to i64
  %73 = getelementptr inbounds [3 x i32]* @vproc, i64 0, i64 %72
  %74 = load i32* %73, align 4
  %75 = icmp eq i32 %74, 1
  br i1 %75, label %bb11, label %bb12

bb11:                                             ; preds = %bb10
  %76 = load i32* %a, align 4
  %77 = sext i32 %76 to i64
  %78 = getelementptr inbounds [3 x i32]* @myparity, i64 0, i64 %77
  store i32 2, i32* %78, align 4
  br label %bb15

bb12:                                             ; preds = %bb10
  %79 = load i32* %a, align 4
  %80 = sext i32 %79 to i64
  %81 = getelementptr inbounds [3 x i32]* @vid, i64 0, i64 %80
  %82 = load i32* %81, align 4
  %83 = and i32 %82, 1
  %84 = icmp eq i32 %83, 0
  br i1 %84, label %bb13, label %bb14

bb13:                                             ; preds = %bb12
  %85 = load i32* %a, align 4
  %86 = sext i32 %85 to i64
  %87 = getelementptr inbounds [3 x i32]* @myparity, i64 0, i64 %86
  store i32 0, i32* %87, align 4
  br label %bb15

bb14:                                             ; preds = %bb12
  %88 = load i32* %a, align 4
  %89 = sext i32 %88 to i64
  %90 = getelementptr inbounds [3 x i32]* @myparity, i64 0, i64 %89
  store i32 1, i32* %90, align 4
  br label %bb15

bb15:                                             ; preds = %bb14, %bb13, %bb11
  %91 = load i32* %a, align 4
  %92 = add nsw i32 %91, 1
  store i32 %92, i32* %a, align 4
  br label %bb16

bb16:                                             ; preds = %bb15, %bb9
  %93 = load i32* %a, align 4
  %94 = icmp sle i32 %93, 2
  br i1 %94, label %bb10, label %bb17

bb17:                                             ; preds = %bb16
  br label %return

return:                                           ; preds = %bb17
  ret void
}

declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i32, i1) nounwind

define void @init_conf() nounwind {
entry:
  %c = alloca [3 x double]
  %gap = alloca [3 x double]
  %e = alloca [3 x double]
  %vSum = alloca [3 x double]
  %gvSum = alloca [3 x double]
  %vMag = alloca double
  %j = alloca i32
  %a = alloca i32
  %nX = alloca i32
  %nY = alloca i32
  %nZ = alloca i32
  %seed = alloca double
  %allreduce1 = alloca double
  %origAtom = alloca [4 x [3 x double]]
  %"alloca point" = bitcast i32 0 to i32
  %origAtom1 = bitcast [4 x [3 x double]]* %origAtom to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %origAtom1, i8* bitcast ([4 x [3 x double]]* @C.41.6229 to i8*), i64 96, i32 8, i1 false)
  store i32 0, i32* %a, align 4
  br label %bb2

bb:                                               ; preds = %bb2
  %0 = load i32* %a, align 4
  %1 = load i32* %a, align 4
  %2 = sext i32 %1 to i64
  %3 = getelementptr inbounds [3 x double]* @al, i64 0, i64 %2
  %4 = load double* %3, align 8
  %5 = load i32* %a, align 4
  %6 = sext i32 %5 to i64
  %7 = getelementptr inbounds [3 x i32]* @InitUcell, i64 0, i64 %6
  %8 = load i32* %7, align 4
  %9 = sitofp i32 %8 to double
  %10 = fdiv double %4, %9
  %11 = sext i32 %0 to i64
  %12 = getelementptr inbounds [3 x double]* %gap, i64 0, i64 %11
  store double %10, double* %12, align 8
  %13 = load i32* %a, align 4
  %14 = add nsw i32 %13, 1
  store i32 %14, i32* %a, align 4
  br label %bb2

bb2:                                              ; preds = %bb, %entry
  %15 = load i32* %a, align 4
  %16 = icmp sle i32 %15, 2
  br i1 %16, label %bb, label %bb3

bb3:                                              ; preds = %bb2
  store i32 0, i32* @n, align 4
  store i32 0, i32* %nZ, align 4
  br label %bb17

bb4:                                              ; preds = %bb17
  %17 = load i32* %nZ, align 4
  %18 = sitofp i32 %17 to double
  %19 = getelementptr inbounds [3 x double]* %gap, i64 0, i64 2
  %20 = load double* %19, align 8
  %21 = fmul double %18, %20
  %22 = getelementptr inbounds [3 x double]* %c, i64 0, i64 2
  store double %21, double* %22, align 8
  store i32 0, i32* %nY, align 4
  br label %bb15

bb5:                                              ; preds = %bb15
  %23 = load i32* %nY, align 4
  %24 = sitofp i32 %23 to double
  %25 = getelementptr inbounds [3 x double]* %gap, i64 0, i64 1
  %26 = load double* %25, align 8
  %27 = fmul double %24, %26
  %28 = getelementptr inbounds [3 x double]* %c, i64 0, i64 1
  store double %27, double* %28, align 8
  store i32 0, i32* %nX, align 4
  br label %bb13

bb6:                                              ; preds = %bb13
  %29 = load i32* %nX, align 4
  %30 = sitofp i32 %29 to double
  %31 = getelementptr inbounds [3 x double]* %gap, i64 0, i64 0
  %32 = load double* %31, align 8
  %33 = fmul double %30, %32
  %34 = getelementptr inbounds [3 x double]* %c, i64 0, i64 0
  store double %33, double* %34, align 8
  store i32 0, i32* %j, align 4
  br label %bb11

bb7:                                              ; preds = %bb11
  store i32 0, i32* %a, align 4
  br label %bb9

bb8:                                              ; preds = %bb9
  %35 = load i32* @n, align 4
  %36 = load i32* %a, align 4
  %37 = load i32* %a, align 4
  %38 = sext i32 %37 to i64
  %39 = getelementptr inbounds [3 x double]* %c, i64 0, i64 %38
  %40 = load double* %39, align 8
  %41 = load i32* %a, align 4
  %42 = sext i32 %41 to i64
  %43 = getelementptr inbounds [3 x double]* %gap, i64 0, i64 %42
  %44 = load double* %43, align 8
  %45 = load i32* %j, align 4
  %46 = load i32* %a, align 4
  %47 = sext i32 %45 to i64
  %48 = getelementptr inbounds [4 x [3 x double]]* %origAtom, i64 0, i64 %47
  %49 = sext i32 %46 to i64
  %50 = getelementptr inbounds [3 x double]* %48, i64 0, i64 %49
  %51 = load double* %50, align 8
  %52 = fmul double %44, %51
  %53 = fadd double %40, %52
  %54 = sext i32 %35 to i64
  %55 = getelementptr inbounds [200000 x [3 x double]]* @r, i64 0, i64 %54
  %56 = sext i32 %36 to i64
  %57 = getelementptr inbounds [3 x double]* %55, i64 0, i64 %56
  store double %53, double* %57, align 8
  %58 = load i32* %a, align 4
  %59 = add nsw i32 %58, 1
  store i32 %59, i32* %a, align 4
  br label %bb9

bb9:                                              ; preds = %bb8, %bb7
  %60 = load i32* %a, align 4
  %61 = icmp sle i32 %60, 2
  br i1 %61, label %bb8, label %bb10

bb10:                                             ; preds = %bb9
  %62 = load i32* @n, align 4
  %63 = add nsw i32 %62, 1
  store i32 %63, i32* @n, align 4
  %64 = load i32* %j, align 4
  %65 = add nsw i32 %64, 1
  store i32 %65, i32* %j, align 4
  br label %bb11

bb11:                                             ; preds = %bb10, %bb6
  %66 = load i32* %j, align 4
  %67 = icmp sle i32 %66, 3
  br i1 %67, label %bb7, label %bb12

bb12:                                             ; preds = %bb11
  %68 = load i32* %nX, align 4
  %69 = add nsw i32 %68, 1
  store i32 %69, i32* %nX, align 4
  br label %bb13

bb13:                                             ; preds = %bb12, %bb5
  %70 = load i32* getelementptr inbounds ([3 x i32]* @InitUcell, i64 0, i64 0), align 4
  %71 = load i32* %nX, align 4
  %72 = icmp sgt i32 %70, %71
  br i1 %72, label %bb6, label %bb14

bb14:                                             ; preds = %bb13
  %73 = load i32* %nY, align 4
  %74 = add nsw i32 %73, 1
  store i32 %74, i32* %nY, align 4
  br label %bb15

bb15:                                             ; preds = %bb14, %bb4
  %75 = load i32* getelementptr inbounds ([3 x i32]* @InitUcell, i64 0, i64 1), align 4
  %76 = load i32* %nY, align 4
  %77 = icmp sgt i32 %75, %76
  br i1 %77, label %bb5, label %bb16

bb16:                                             ; preds = %bb15
  %78 = load i32* %nZ, align 4
  %79 = add nsw i32 %78, 1
  store i32 %79, i32* %nZ, align 4
  br label %bb17

bb17:                                             ; preds = %bb16, %bb3
  %80 = load i32* getelementptr inbounds ([3 x i32]* @InitUcell, i64 0, i64 2), align 4
  %81 = load i32* %nZ, align 4
  %82 = icmp sgt i32 %80, %81
  br i1 %82, label %bb4, label %bb18

bb18:                                             ; preds = %bb17
  %83 = call double @MPI_Wtime() nounwind
  store double %83, double* %allreduce1, align 8
  %84 = call i32 @MPI_Allreduce(i8* bitcast (i32* @n to i8*), i8* bitcast (i32* @nglob to i8*), i32 1, i32 1275069445, i32 1476395011, i32 1140850688) nounwind
  %85 = call double @MPI_Wtime() nounwind
  %86 = load double* %allreduce1, align 8
  %87 = fsub double %85, %86
  %88 = load double* @allreduce, align 8
  %89 = fadd double %87, %88
  store double %89, double* @allreduce, align 8
  %90 = load i32* @sid, align 4
  %91 = icmp eq i32 %90, 0
  br i1 %91, label %bb19, label %bb20

bb19:                                             ; preds = %bb18
  %92 = load i32* @nglob, align 4
  %93 = call i32 (i8*, ...)* @printf(i8* noalias getelementptr inbounds ([12 x i8]* @.str9, i64 0, i64 0), i32 %92) nounwind
  br label %bb20

bb20:                                             ; preds = %bb19, %bb18
  %94 = load i32* @sid, align 4
  %95 = sitofp i32 %94 to double
  %96 = fadd double %95, 1.359700e+04
  store double %96, double* %seed, align 8
  %97 = load double* @InitTemp, align 8
  %98 = fmul double %97, 3.000000e+00
  %99 = call double @sqrt(double %98) nounwind readonly
  store double %99, double* %vMag, align 8
  store i32 0, i32* %a, align 4
  br label %bb22

bb21:                                             ; preds = %bb22
  %100 = load i32* %a, align 4
  %101 = sext i32 %100 to i64
  %102 = getelementptr inbounds [3 x double]* %vSum, i64 0, i64 %101
  store double 0.000000e+00, double* %102, align 8
  %103 = load i32* %a, align 4
  %104 = add nsw i32 %103, 1
  store i32 %104, i32* %a, align 4
  br label %bb22

bb22:                                             ; preds = %bb21, %bb20
  %105 = load i32* %a, align 4
  %106 = icmp sle i32 %105, 2
  br i1 %106, label %bb21, label %bb23

bb23:                                             ; preds = %bb22
  store i32 0, i32* %j, align 4
  br label %bb29

bb24:                                             ; preds = %bb29
  %e25 = bitcast [3 x double]* %e to double*
  call void @RandVec3(double* %e25, double* %seed) nounwind
  store i32 0, i32* %a, align 4
  br label %bb27

bb26:                                             ; preds = %bb27
  %107 = load i32* %j, align 4
  %108 = load i32* %a, align 4
  %109 = load i32* %a, align 4
  %110 = sext i32 %109 to i64
  %111 = getelementptr inbounds [3 x double]* %e, i64 0, i64 %110
  %112 = load double* %111, align 8
  %113 = load double* %vMag, align 8
  %114 = fmul double %112, %113
  %115 = sext i32 %107 to i64
  %116 = getelementptr inbounds [200000 x [3 x double]]* @rv, i64 0, i64 %115
  %117 = sext i32 %108 to i64
  %118 = getelementptr inbounds [3 x double]* %116, i64 0, i64 %117
  store double %114, double* %118, align 8
  %119 = load i32* %a, align 4
  %120 = load i32* %a, align 4
  %121 = sext i32 %120 to i64
  %122 = getelementptr inbounds [3 x double]* %vSum, i64 0, i64 %121
  %123 = load double* %122, align 8
  %124 = load i32* %j, align 4
  %125 = load i32* %a, align 4
  %126 = sext i32 %124 to i64
  %127 = getelementptr inbounds [200000 x [3 x double]]* @rv, i64 0, i64 %126
  %128 = sext i32 %125 to i64
  %129 = getelementptr inbounds [3 x double]* %127, i64 0, i64 %128
  %130 = load double* %129, align 8
  %131 = fadd double %123, %130
  %132 = sext i32 %119 to i64
  %133 = getelementptr inbounds [3 x double]* %vSum, i64 0, i64 %132
  store double %131, double* %133, align 8
  %134 = load i32* %a, align 4
  %135 = add nsw i32 %134, 1
  store i32 %135, i32* %a, align 4
  br label %bb27

bb27:                                             ; preds = %bb26, %bb24
  %136 = load i32* %a, align 4
  %137 = icmp sle i32 %136, 2
  br i1 %137, label %bb26, label %bb28

bb28:                                             ; preds = %bb27
  %138 = load i32* %j, align 4
  %139 = add nsw i32 %138, 1
  store i32 %139, i32* %j, align 4
  br label %bb29

bb29:                                             ; preds = %bb28, %bb23
  %140 = load i32* @n, align 4
  %141 = load i32* %j, align 4
  %142 = icmp slt i32 %141, %140
  br i1 %142, label %bb24, label %bb30

bb30:                                             ; preds = %bb29
  %143 = call double @MPI_Wtime() nounwind
  store double %143, double* %allreduce1, align 8
  %vSum31 = bitcast [3 x double]* %vSum to double*
  %vSum3132 = bitcast double* %vSum31 to i8*
  %gvSum33 = bitcast [3 x double]* %gvSum to double*
  %gvSum3334 = bitcast double* %gvSum33 to i8*
  %144 = call i32 @MPI_Allreduce(i8* %vSum3132, i8* %gvSum3334, i32 3, i32 1275070475, i32 1476395011, i32 1140850688) nounwind
  %145 = call double @MPI_Wtime() nounwind
  %146 = load double* %allreduce1, align 8
  %147 = fsub double %145, %146
  %148 = load double* @allreduce, align 8
  %149 = fadd double %147, %148
  store double %149, double* @allreduce, align 8
  store i32 0, i32* %a, align 4
  br label %bb36

bb35:                                             ; preds = %bb36
  %150 = load i32* %a, align 4
  %151 = load i32* %a, align 4
  %152 = sext i32 %151 to i64
  %153 = getelementptr inbounds [3 x double]* %gvSum, i64 0, i64 %152
  %154 = load double* %153, align 8
  %155 = load i32* @nglob, align 4
  %156 = sitofp i32 %155 to double
  %157 = fdiv double %154, %156
  %158 = sext i32 %150 to i64
  %159 = getelementptr inbounds [3 x double]* %gvSum, i64 0, i64 %158
  store double %157, double* %159, align 8
  %160 = load i32* %a, align 4
  %161 = add nsw i32 %160, 1
  store i32 %161, i32* %a, align 4
  br label %bb36

bb36:                                             ; preds = %bb35, %bb30
  %162 = load i32* %a, align 4
  %163 = icmp sle i32 %162, 2
  br i1 %163, label %bb35, label %bb37

bb37:                                             ; preds = %bb36
  store i32 0, i32* %j, align 4
  br label %bb42

bb38:                                             ; preds = %bb42
  store i32 0, i32* %a, align 4
  br label %bb40

bb39:                                             ; preds = %bb40
  %164 = load i32* %j, align 4
  %165 = load i32* %a, align 4
  %166 = load i32* %j, align 4
  %167 = load i32* %a, align 4
  %168 = sext i32 %166 to i64
  %169 = getelementptr inbounds [200000 x [3 x double]]* @rv, i64 0, i64 %168
  %170 = sext i32 %167 to i64
  %171 = getelementptr inbounds [3 x double]* %169, i64 0, i64 %170
  %172 = load double* %171, align 8
  %173 = load i32* %a, align 4
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds [3 x double]* %gvSum, i64 0, i64 %174
  %176 = load double* %175, align 8
  %177 = fsub double %172, %176
  %178 = sext i32 %164 to i64
  %179 = getelementptr inbounds [200000 x [3 x double]]* @rv, i64 0, i64 %178
  %180 = sext i32 %165 to i64
  %181 = getelementptr inbounds [3 x double]* %179, i64 0, i64 %180
  store double %177, double* %181, align 8
  %182 = load i32* %a, align 4
  %183 = add nsw i32 %182, 1
  store i32 %183, i32* %a, align 4
  br label %bb40

bb40:                                             ; preds = %bb39, %bb38
  %184 = load i32* %a, align 4
  %185 = icmp sle i32 %184, 2
  br i1 %185, label %bb39, label %bb41

bb41:                                             ; preds = %bb40
  %186 = load i32* %j, align 4
  %187 = add nsw i32 %186, 1
  store i32 %187, i32* %j, align 4
  br label %bb42

bb42:                                             ; preds = %bb41, %bb37
  %188 = load i32* @n, align 4
  %189 = load i32* %j, align 4
  %190 = icmp slt i32 %189, %188
  br i1 %190, label %bb38, label %bb43

bb43:                                             ; preds = %bb42
  br label %return

return:                                           ; preds = %bb43
  ret void
}

declare i32 @MPI_Allreduce(i8*, i8*, i32, i32, i32, i32)

define void @single_step() nounwind {
entry:
  %i = alloca i32
  %a = alloca i32
  %"alloca point" = bitcast i32 0 to i32
  call void (...)* bitcast (void ()* @half_kick to void (...)*)() nounwind
  store i32 0, i32* %i, align 4
  br label %bb4

bb:                                               ; preds = %bb4
  store i32 0, i32* %a, align 4
  br label %bb2

bb1:                                              ; preds = %bb2
  %0 = load i32* %i, align 4
  %1 = load i32* %a, align 4
  %2 = load i32* %i, align 4
  %3 = load i32* %a, align 4
  %4 = sext i32 %2 to i64
  %5 = getelementptr inbounds [200000 x [3 x double]]* @r, i64 0, i64 %4
  %6 = sext i32 %3 to i64
  %7 = getelementptr inbounds [3 x double]* %5, i64 0, i64 %6
  %8 = load double* %7, align 8
  %9 = load i32* %i, align 4
  %10 = load i32* %a, align 4
  %11 = sext i32 %9 to i64
  %12 = getelementptr inbounds [200000 x [3 x double]]* @rv, i64 0, i64 %11
  %13 = sext i32 %10 to i64
  %14 = getelementptr inbounds [3 x double]* %12, i64 0, i64 %13
  %15 = load double* %14, align 8
  %16 = load double* @DeltaT, align 8
  %17 = fmul double %15, %16
  %18 = fadd double %8, %17
  %19 = sext i32 %0 to i64
  %20 = getelementptr inbounds [200000 x [3 x double]]* @r, i64 0, i64 %19
  %21 = sext i32 %1 to i64
  %22 = getelementptr inbounds [3 x double]* %20, i64 0, i64 %21
  store double %18, double* %22, align 8
  %23 = load i32* %a, align 4
  %24 = add nsw i32 %23, 1
  store i32 %24, i32* %a, align 4
  br label %bb2

bb2:                                              ; preds = %bb1, %bb
  %25 = load i32* %a, align 4
  %26 = icmp sle i32 %25, 2
  br i1 %26, label %bb1, label %bb3

bb3:                                              ; preds = %bb2
  %27 = load i32* %i, align 4
  %28 = add nsw i32 %27, 1
  store i32 %28, i32* %i, align 4
  br label %bb4

bb4:                                              ; preds = %bb3, %entry
  %29 = load i32* @n, align 4
  %30 = load i32* %i, align 4
  %31 = icmp slt i32 %30, %29
  br i1 %31, label %bb, label %bb5

bb5:                                              ; preds = %bb4
  call void (...)* bitcast (void ()* @atom_move to void (...)*)() nounwind
  call void (...)* bitcast (void ()* @atom_copy to void (...)*)() nounwind
  call void (...)* bitcast (void ()* @compute_accel to void (...)*)() nounwind
  call void (...)* bitcast (void ()* @half_kick to void (...)*)() nounwind
  br label %return

return:                                           ; preds = %bb5
  ret void
}

define void @half_kick() nounwind {
entry:
  %i = alloca i32
  %a = alloca i32
  %"alloca point" = bitcast i32 0 to i32
  store i32 0, i32* %i, align 4
  br label %bb4

bb:                                               ; preds = %bb4
  store i32 0, i32* %a, align 4
  br label %bb2

bb1:                                              ; preds = %bb2
  %0 = load i32* %i, align 4
  %1 = load i32* %a, align 4
  %2 = load i32* %i, align 4
  %3 = load i32* %a, align 4
  %4 = sext i32 %2 to i64
  %5 = getelementptr inbounds [200000 x [3 x double]]* @rv, i64 0, i64 %4
  %6 = sext i32 %3 to i64
  %7 = getelementptr inbounds [3 x double]* %5, i64 0, i64 %6
  %8 = load double* %7, align 8
  %9 = load i32* %i, align 4
  %10 = load i32* %a, align 4
  %11 = sext i32 %9 to i64
  %12 = getelementptr inbounds [100000 x [3 x double]]* @ra, i64 0, i64 %11
  %13 = sext i32 %10 to i64
  %14 = getelementptr inbounds [3 x double]* %12, i64 0, i64 %13
  %15 = load double* %14, align 8
  %16 = load double* @DeltaTH, align 8
  %17 = fmul double %15, %16
  %18 = fadd double %8, %17
  %19 = sext i32 %0 to i64
  %20 = getelementptr inbounds [200000 x [3 x double]]* @rv, i64 0, i64 %19
  %21 = sext i32 %1 to i64
  %22 = getelementptr inbounds [3 x double]* %20, i64 0, i64 %21
  store double %18, double* %22, align 8
  %23 = load i32* %a, align 4
  %24 = add nsw i32 %23, 1
  store i32 %24, i32* %a, align 4
  br label %bb2

bb2:                                              ; preds = %bb1, %bb
  %25 = load i32* %a, align 4
  %26 = icmp sle i32 %25, 2
  br i1 %26, label %bb1, label %bb3

bb3:                                              ; preds = %bb2
  %27 = load i32* %i, align 4
  %28 = add nsw i32 %27, 1
  store i32 %28, i32* %i, align 4
  br label %bb4

bb4:                                              ; preds = %bb3, %entry
  %29 = load i32* @n, align 4
  %30 = load i32* %i, align 4
  %31 = icmp slt i32 %30, %29
  br i1 %31, label %bb, label %bb5

bb5:                                              ; preds = %bb4
  br label %return

return:                                           ; preds = %bb5
  ret void
}

define void @atom_copy() nounwind {
entry:
  %kd = alloca i32
  %kdd = alloca i32
  %i = alloca i32
  %ku = alloca i32
  %inode = alloca i32
  %nsd = alloca i32
  %nrc = alloca i32
  %a = alloca i32
  %nbnew = alloca i32
  %com1 = alloca double
  %"alloca point" = bitcast i32 0 to i32
  store i32 0, i32* %nbnew, align 4
  store i32 0, i32* %kd, align 4
  br label %bb43

bb:                                               ; preds = %bb43
  store i32 0, i32* %kdd, align 4
  br label %bb2

bb1:                                              ; preds = %bb2
  %0 = load i32* %kd, align 4
  %1 = mul nsw i32 %0, 2
  %2 = load i32* %kdd, align 4
  %3 = add nsw i32 %1, %2
  %4 = sext i32 %3 to i64
  %5 = getelementptr inbounds [6 x [100000 x i32]]* @lsb, i64 0, i64 %4
  %6 = getelementptr inbounds [100000 x i32]* %5, i64 0, i64 0
  store i32 0, i32* %6, align 4
  %7 = load i32* %kdd, align 4
  %8 = add nsw i32 %7, 1
  store i32 %8, i32* %kdd, align 4
  br label %bb2

bb2:                                              ; preds = %bb1, %bb
  %9 = load i32* %kdd, align 4
  %10 = icmp sle i32 %9, 1
  br i1 %10, label %bb1, label %bb3

bb3:                                              ; preds = %bb2
  store i32 0, i32* %i, align 4
  br label %bb10

bb4:                                              ; preds = %bb10
  store i32 0, i32* %kdd, align 4
  br label %bb8

bb5:                                              ; preds = %bb8
  %11 = load i32* %kd, align 4
  %12 = mul nsw i32 %11, 2
  %13 = load i32* %kdd, align 4
  %14 = add nsw i32 %12, %13
  store i32 %14, i32* %ku, align 4
  %15 = load i32* %i, align 4
  %16 = sext i32 %15 to i64
  %17 = getelementptr inbounds [200000 x [3 x double]]* @r, i64 0, i64 %16
  %18 = getelementptr inbounds [3 x double]* %17, i64 0, i64 0
  %19 = load i32* %ku, align 4
  %20 = call i32 @bbd(double* %18, i32 %19) nounwind
  %21 = icmp ne i32 %20, 0
  br i1 %21, label %bb6, label %bb7

bb6:                                              ; preds = %bb5
  %22 = load i32* %ku, align 4
  %23 = load i32* %ku, align 4
  %24 = sext i32 %23 to i64
  %25 = getelementptr inbounds [6 x [100000 x i32]]* @lsb, i64 0, i64 %24
  %26 = getelementptr inbounds [100000 x i32]* %25, i64 0, i64 0
  %27 = load i32* %26, align 4
  %28 = add nsw i32 %27, 1
  %29 = sext i32 %23 to i64
  %30 = getelementptr inbounds [6 x [100000 x i32]]* @lsb, i64 0, i64 %29
  %31 = getelementptr inbounds [100000 x i32]* %30, i64 0, i64 0
  store i32 %28, i32* %31, align 4
  %32 = sext i32 %23 to i64
  %33 = getelementptr inbounds [6 x [100000 x i32]]* @lsb, i64 0, i64 %32
  %34 = getelementptr inbounds [100000 x i32]* %33, i64 0, i64 0
  %35 = load i32* %34, align 4
  %36 = sext i32 %22 to i64
  %37 = getelementptr inbounds [6 x [100000 x i32]]* @lsb, i64 0, i64 %36
  %38 = sext i32 %35 to i64
  %39 = getelementptr inbounds [100000 x i32]* %37, i64 0, i64 %38
  %40 = load i32* %i, align 4
  store i32 %40, i32* %39, align 4
  br label %bb7

bb7:                                              ; preds = %bb6, %bb5
  %41 = load i32* %kdd, align 4
  %42 = add nsw i32 %41, 1
  store i32 %42, i32* %kdd, align 4
  br label %bb8

bb8:                                              ; preds = %bb7, %bb4
  %43 = load i32* %kdd, align 4
  %44 = icmp sle i32 %43, 1
  br i1 %44, label %bb5, label %bb9

bb9:                                              ; preds = %bb8
  %45 = load i32* %i, align 4
  %46 = add nsw i32 %45, 1
  store i32 %46, i32* %i, align 4
  br label %bb10

bb10:                                             ; preds = %bb9, %bb3
  %47 = load i32* @n, align 4
  %48 = load i32* %nbnew, align 4
  %49 = add nsw i32 %47, %48
  %50 = load i32* %i, align 4
  %51 = icmp sgt i32 %49, %50
  br i1 %51, label %bb4, label %bb11

bb11:                                             ; preds = %bb10
  %52 = call double @MPI_Wtime() nounwind
  store double %52, double* %com1, align 8
  store i32 0, i32* %kdd, align 4
  br label %bb41

bb12:                                             ; preds = %bb41
  %53 = load i32* %kd, align 4
  %54 = mul nsw i32 %53, 2
  %55 = load i32* %kdd, align 4
  %56 = add nsw i32 %54, %55
  store i32 %56, i32* %ku, align 4
  %57 = load i32* %ku, align 4
  %58 = sext i32 %57 to i64
  %59 = getelementptr inbounds [6 x i32]* @nn, i64 0, i64 %58
  %60 = load i32* %59, align 4
  store i32 %60, i32* %inode, align 4
  %61 = load i32* %ku, align 4
  %62 = sext i32 %61 to i64
  %63 = getelementptr inbounds [6 x [100000 x i32]]* @lsb, i64 0, i64 %62
  %64 = getelementptr inbounds [100000 x i32]* %63, i64 0, i64 0
  %65 = load i32* %64, align 4
  store i32 %65, i32* %nsd, align 4
  %66 = load i32* %kd, align 4
  %67 = sext i32 %66 to i64
  %68 = getelementptr inbounds [3 x i32]* @myparity, i64 0, i64 %67
  %69 = load i32* %68, align 4
  %70 = icmp eq i32 %69, 0
  br i1 %70, label %bb13, label %bb16

bb13:                                             ; preds = %bb12
  %nsd14 = bitcast i32* %nsd to i8*
  %71 = load i32* %inode, align 4
  %72 = call i32 @MPI_Send(i8* %nsd14, i32 1, i32 1275069445, i32 %71, i32 10, i32 1140850688) nounwind
  %nrc15 = bitcast i32* %nrc to i8*
  %73 = call i32 @MPI_Recv(i8* %nrc15, i32 1, i32 1275069445, i32 -2, i32 10, i32 1140850688, %struct.MPI_Status* @status) nounwind
  br label %bb21

bb16:                                             ; preds = %bb12
  %74 = load i32* %kd, align 4
  %75 = sext i32 %74 to i64
  %76 = getelementptr inbounds [3 x i32]* @myparity, i64 0, i64 %75
  %77 = load i32* %76, align 4
  %78 = icmp eq i32 %77, 1
  br i1 %78, label %bb17, label %bb20

bb17:                                             ; preds = %bb16
  %nrc18 = bitcast i32* %nrc to i8*
  %79 = call i32 @MPI_Recv(i8* %nrc18, i32 1, i32 1275069445, i32 -2, i32 10, i32 1140850688, %struct.MPI_Status* @status) nounwind
  %nsd19 = bitcast i32* %nsd to i8*
  %80 = load i32* %inode, align 4
  %81 = call i32 @MPI_Send(i8* %nsd19, i32 1, i32 1275069445, i32 %80, i32 10, i32 1140850688) nounwind
  br label %bb21

bb20:                                             ; preds = %bb16
  %82 = load i32* %nsd, align 4
  store i32 %82, i32* %nrc, align 4
  br label %bb21

bb21:                                             ; preds = %bb20, %bb17, %bb13
  store i32 1, i32* %i, align 4
  br label %bb26

bb22:                                             ; preds = %bb26
  store i32 0, i32* %a, align 4
  br label %bb24

bb23:                                             ; preds = %bb24
  %83 = load i32* %i, align 4
  %84 = mul nsw i32 %83, 3
  %85 = add nsw i32 %84, -3
  %86 = load i32* %a, align 4
  %87 = add nsw i32 %85, %86
  %88 = load i32* %ku, align 4
  %89 = load i32* %i, align 4
  %90 = sext i32 %88 to i64
  %91 = getelementptr inbounds [6 x [100000 x i32]]* @lsb, i64 0, i64 %90
  %92 = sext i32 %89 to i64
  %93 = getelementptr inbounds [100000 x i32]* %91, i64 0, i64 %92
  %94 = load i32* %93, align 4
  %95 = load i32* %a, align 4
  %96 = sext i32 %94 to i64
  %97 = getelementptr inbounds [200000 x [3 x double]]* @r, i64 0, i64 %96
  %98 = sext i32 %95 to i64
  %99 = getelementptr inbounds [3 x double]* %97, i64 0, i64 %98
  %100 = load double* %99, align 8
  %101 = load i32* %ku, align 4
  %102 = load i32* %a, align 4
  %103 = sext i32 %101 to i64
  %104 = getelementptr inbounds [6 x [3 x double]]* @sv, i64 0, i64 %103
  %105 = sext i32 %102 to i64
  %106 = getelementptr inbounds [3 x double]* %104, i64 0, i64 %105
  %107 = load double* %106, align 8
  %108 = fsub double %100, %107
  %109 = sext i32 %87 to i64
  %110 = getelementptr inbounds [300000 x double]* @dbuf, i64 0, i64 %109
  store double %108, double* %110, align 8
  %111 = load i32* %a, align 4
  %112 = add nsw i32 %111, 1
  store i32 %112, i32* %a, align 4
  br label %bb24

bb24:                                             ; preds = %bb23, %bb22
  %113 = load i32* %a, align 4
  %114 = icmp sle i32 %113, 2
  br i1 %114, label %bb23, label %bb25

bb25:                                             ; preds = %bb24
  %115 = load i32* %i, align 4
  %116 = add nsw i32 %115, 1
  store i32 %116, i32* %i, align 4
  br label %bb26

bb26:                                             ; preds = %bb25, %bb21
  %117 = load i32* %nsd, align 4
  %118 = load i32* %i, align 4
  %119 = icmp sle i32 %118, %117
  br i1 %119, label %bb22, label %bb27

bb27:                                             ; preds = %bb26
  %120 = load i32* %kd, align 4
  %121 = sext i32 %120 to i64
  %122 = getelementptr inbounds [3 x i32]* @myparity, i64 0, i64 %121
  %123 = load i32* %122, align 4
  %124 = icmp eq i32 %123, 0
  br i1 %124, label %bb28, label %bb29

bb28:                                             ; preds = %bb27
  %125 = load i32* %nsd, align 4
  %126 = mul nsw i32 %125, 3
  %127 = load i32* %inode, align 4
  %128 = call i32 @MPI_Send(i8* bitcast ([300000 x double]* @dbuf to i8*), i32 %126, i32 1275070475, i32 %127, i32 20, i32 1140850688) nounwind
  %129 = load i32* %nrc, align 4
  %130 = mul nsw i32 %129, 3
  %131 = call i32 @MPI_Recv(i8* bitcast ([300000 x double]* @dbufr to i8*), i32 %130, i32 1275070475, i32 -2, i32 20, i32 1140850688, %struct.MPI_Status* @status) nounwind
  br label %bb34

bb29:                                             ; preds = %bb27
  %132 = load i32* %kd, align 4
  %133 = sext i32 %132 to i64
  %134 = getelementptr inbounds [3 x i32]* @myparity, i64 0, i64 %133
  %135 = load i32* %134, align 4
  %136 = icmp eq i32 %135, 1
  br i1 %136, label %bb30, label %bb31

bb30:                                             ; preds = %bb29
  %137 = load i32* %nrc, align 4
  %138 = mul nsw i32 %137, 3
  %139 = call i32 @MPI_Recv(i8* bitcast ([300000 x double]* @dbufr to i8*), i32 %138, i32 1275070475, i32 -2, i32 20, i32 1140850688, %struct.MPI_Status* @status) nounwind
  %140 = load i32* %nsd, align 4
  %141 = mul nsw i32 %140, 3
  %142 = load i32* %inode, align 4
  %143 = call i32 @MPI_Send(i8* bitcast ([300000 x double]* @dbuf to i8*), i32 %141, i32 1275070475, i32 %142, i32 20, i32 1140850688) nounwind
  br label %bb34

bb31:                                             ; preds = %bb29
  store i32 0, i32* %i, align 4
  br label %bb33

bb32:                                             ; preds = %bb33
  %144 = load i32* %i, align 4
  %145 = load i32* %i, align 4
  %146 = sext i32 %145 to i64
  %147 = getelementptr inbounds [300000 x double]* @dbuf, i64 0, i64 %146
  %148 = load double* %147, align 8
  %149 = sext i32 %144 to i64
  %150 = getelementptr inbounds [300000 x double]* @dbufr, i64 0, i64 %149
  store double %148, double* %150, align 8
  %151 = load i32* %i, align 4
  %152 = add nsw i32 %151, 1
  store i32 %152, i32* %i, align 4
  br label %bb33

bb33:                                             ; preds = %bb32, %bb31
  %153 = load i32* %nrc, align 4
  %154 = mul nsw i32 %153, 3
  %155 = load i32* %i, align 4
  %156 = icmp sgt i32 %154, %155
  br i1 %156, label %bb32, label %bb34

bb34:                                             ; preds = %bb33, %bb30, %bb28
  store i32 0, i32* %i, align 4
  br label %bb39

bb35:                                             ; preds = %bb39
  store i32 0, i32* %a, align 4
  br label %bb37

bb36:                                             ; preds = %bb37
  %157 = load i32* @n, align 4
  %158 = load i32* %nbnew, align 4
  %159 = add nsw i32 %157, %158
  %160 = load i32* %i, align 4
  %161 = add nsw i32 %159, %160
  %162 = load i32* %a, align 4
  %163 = load i32* %i, align 4
  %164 = mul nsw i32 %163, 3
  %165 = load i32* %a, align 4
  %166 = add nsw i32 %164, %165
  %167 = sext i32 %166 to i64
  %168 = getelementptr inbounds [300000 x double]* @dbufr, i64 0, i64 %167
  %169 = load double* %168, align 8
  %170 = sext i32 %161 to i64
  %171 = getelementptr inbounds [200000 x [3 x double]]* @r, i64 0, i64 %170
  %172 = sext i32 %162 to i64
  %173 = getelementptr inbounds [3 x double]* %171, i64 0, i64 %172
  store double %169, double* %173, align 8
  %174 = load i32* %a, align 4
  %175 = add nsw i32 %174, 1
  store i32 %175, i32* %a, align 4
  br label %bb37

bb37:                                             ; preds = %bb36, %bb35
  %176 = load i32* %a, align 4
  %177 = icmp sle i32 %176, 2
  br i1 %177, label %bb36, label %bb38

bb38:                                             ; preds = %bb37
  %178 = load i32* %i, align 4
  %179 = add nsw i32 %178, 1
  store i32 %179, i32* %i, align 4
  br label %bb39

bb39:                                             ; preds = %bb38, %bb34
  %180 = load i32* %nrc, align 4
  %181 = load i32* %i, align 4
  %182 = icmp slt i32 %181, %180
  br i1 %182, label %bb35, label %bb40

bb40:                                             ; preds = %bb39
  %183 = load i32* %nrc, align 4
  %184 = load i32* %nbnew, align 4
  %185 = add nsw i32 %184, %183
  store i32 %185, i32* %nbnew, align 4
  %186 = call i32 @MPI_Barrier(i32 1140850688) nounwind
  %187 = load i32* %kdd, align 4
  %188 = add nsw i32 %187, 1
  store i32 %188, i32* %kdd, align 4
  br label %bb41

bb41:                                             ; preds = %bb40, %bb11
  %189 = load i32* %kdd, align 4
  %190 = icmp sle i32 %189, 1
  br i1 %190, label %bb12, label %bb42

bb42:                                             ; preds = %bb41
  %191 = call double @MPI_Wtime() nounwind
  %192 = load double* %com1, align 8
  %193 = fsub double %191, %192
  %194 = load double* @comt, align 8
  %195 = fadd double %193, %194
  store double %195, double* @comt, align 8
  %196 = load i32* %kd, align 4
  %197 = add nsw i32 %196, 1
  store i32 %197, i32* %kd, align 4
  br label %bb43

bb43:                                             ; preds = %bb42, %entry
  %198 = load i32* %kd, align 4
  %199 = icmp sle i32 %198, 2
  br i1 %199, label %bb, label %bb44

bb44:                                             ; preds = %bb43
  %200 = load i32* %nbnew, align 4
  store i32 %200, i32* @nb, align 4
  br label %return

return:                                           ; preds = %bb44
  ret void
}

declare i32 @MPI_Send(i8*, i32, i32, i32, i32, i32)

declare i32 @MPI_Recv(i8*, i32, i32, i32, i32, i32, %struct.MPI_Status*)

declare i32 @MPI_Barrier(i32)

define void @compute_accel() nounwind {
entry:
  %i = alloca i32
  %j = alloca i32
  %a = alloca i32
  %lc2 = alloca [3 x i32]
  %lcyz2 = alloca i32
  %lcxyz2 = alloca i32
  %mc = alloca [3 x i32]
  %c = alloca i32
  %mc1 = alloca [3 x i32]
  %c1 = alloca i32
  %bintra = alloca i32
  %dr = alloca [3 x double]
  %rr = alloca double
  %ri2 = alloca double
  %ri6 = alloca double
  %r1 = alloca double
  %rrCut = alloca double
  %fcVal = alloca double
  %f = alloca double
  %vVal = alloca double
  %lpe = alloca double
  %allreduce1 = alloca double
  %"alloca point" = bitcast i32 0 to i32
  store double 0.000000e+00, double* %lpe, align 8
  store i32 0, i32* %i, align 4
  br label %bb4

bb:                                               ; preds = %bb4
  store i32 0, i32* %a, align 4
  br label %bb2

bb1:                                              ; preds = %bb2
  %0 = load i32* %i, align 4
  %1 = load i32* %a, align 4
  %2 = sext i32 %0 to i64
  %3 = getelementptr inbounds [100000 x [3 x double]]* @ra, i64 0, i64 %2
  %4 = sext i32 %1 to i64
  %5 = getelementptr inbounds [3 x double]* %3, i64 0, i64 %4
  store double 0.000000e+00, double* %5, align 8
  %6 = load i32* %a, align 4
  %7 = add nsw i32 %6, 1
  store i32 %7, i32* %a, align 4
  br label %bb2

bb2:                                              ; preds = %bb1, %bb
  %8 = load i32* %a, align 4
  %9 = icmp sle i32 %8, 2
  br i1 %9, label %bb1, label %bb3

bb3:                                              ; preds = %bb2
  %10 = load i32* %i, align 4
  %11 = add nsw i32 %10, 1
  store i32 %11, i32* %i, align 4
  br label %bb4

bb4:                                              ; preds = %bb3, %entry
  %12 = load i32* @n, align 4
  %13 = load i32* %i, align 4
  %14 = icmp slt i32 %13, %12
  br i1 %14, label %bb, label %bb5

bb5:                                              ; preds = %bb4
  store i32 0, i32* %a, align 4
  br label %bb7

bb6:                                              ; preds = %bb7
  %15 = load i32* %a, align 4
  %16 = load i32* %a, align 4
  %17 = sext i32 %16 to i64
  %18 = getelementptr inbounds [3 x i32]* @lc, i64 0, i64 %17
  %19 = load i32* %18, align 4
  %20 = add nsw i32 %19, 2
  %21 = sext i32 %15 to i64
  %22 = getelementptr inbounds [3 x i32]* %lc2, i64 0, i64 %21
  store i32 %20, i32* %22, align 4
  %23 = load i32* %a, align 4
  %24 = add nsw i32 %23, 1
  store i32 %24, i32* %a, align 4
  br label %bb7

bb7:                                              ; preds = %bb6, %bb5
  %25 = load i32* %a, align 4
  %26 = icmp sle i32 %25, 2
  br i1 %26, label %bb6, label %bb8

bb8:                                              ; preds = %bb7
  %27 = getelementptr inbounds [3 x i32]* %lc2, i64 0, i64 1
  %28 = load i32* %27, align 4
  %29 = getelementptr inbounds [3 x i32]* %lc2, i64 0, i64 2
  %30 = load i32* %29, align 4
  %31 = mul nsw i32 %28, %30
  store i32 %31, i32* %lcyz2, align 4
  %32 = getelementptr inbounds [3 x i32]* %lc2, i64 0, i64 0
  %33 = load i32* %32, align 4
  %34 = load i32* %lcyz2, align 4
  %35 = mul nsw i32 %33, %34
  store i32 %35, i32* %lcxyz2, align 4
  store i32 0, i32* %c, align 4
  br label %bb10

bb9:                                              ; preds = %bb10
  %36 = load i32* %c, align 4
  %37 = sext i32 %36 to i64
  %38 = getelementptr inbounds [100000 x i32]* @head, i64 0, i64 %37
  store i32 -1, i32* %38, align 4
  %39 = load i32* %c, align 4
  %40 = add nsw i32 %39, 1
  store i32 %40, i32* %c, align 4
  br label %bb10

bb10:                                             ; preds = %bb9, %bb8
  %41 = load i32* %c, align 4
  %42 = load i32* %lcxyz2, align 4
  %43 = icmp slt i32 %41, %42
  br i1 %43, label %bb9, label %bb11

bb11:                                             ; preds = %bb10
  store i32 0, i32* %i, align 4
  br label %bb16

bb12:                                             ; preds = %bb16
  store i32 0, i32* %a, align 4
  br label %bb14

bb13:                                             ; preds = %bb14
  %44 = load i32* %a, align 4
  %45 = load i32* %i, align 4
  %46 = load i32* %a, align 4
  %47 = sext i32 %45 to i64
  %48 = getelementptr inbounds [200000 x [3 x double]]* @r, i64 0, i64 %47
  %49 = sext i32 %46 to i64
  %50 = getelementptr inbounds [3 x double]* %48, i64 0, i64 %49
  %51 = load double* %50, align 8
  %52 = load i32* %a, align 4
  %53 = sext i32 %52 to i64
  %54 = getelementptr inbounds [3 x double]* @rc, i64 0, i64 %53
  %55 = load double* %54, align 8
  %56 = fadd double %51, %55
  %57 = load i32* %a, align 4
  %58 = sext i32 %57 to i64
  %59 = getelementptr inbounds [3 x double]* @rc, i64 0, i64 %58
  %60 = load double* %59, align 8
  %61 = fdiv double %56, %60
  %62 = fptosi double %61 to i32
  %63 = sext i32 %44 to i64
  %64 = getelementptr inbounds [3 x i32]* %mc, i64 0, i64 %63
  store i32 %62, i32* %64, align 4
  %65 = load i32* %a, align 4
  %66 = add nsw i32 %65, 1
  store i32 %66, i32* %a, align 4
  br label %bb14

bb14:                                             ; preds = %bb13, %bb12
  %67 = load i32* %a, align 4
  %68 = icmp sle i32 %67, 2
  br i1 %68, label %bb13, label %bb15

bb15:                                             ; preds = %bb14
  %69 = getelementptr inbounds [3 x i32]* %mc, i64 0, i64 0
  %70 = load i32* %69, align 4
  %71 = load i32* %lcyz2, align 4
  %72 = mul nsw i32 %70, %71
  %73 = getelementptr inbounds [3 x i32]* %mc, i64 0, i64 1
  %74 = load i32* %73, align 4
  %75 = getelementptr inbounds [3 x i32]* %lc2, i64 0, i64 2
  %76 = load i32* %75, align 4
  %77 = mul nsw i32 %74, %76
  %78 = add nsw i32 %72, %77
  %79 = getelementptr inbounds [3 x i32]* %mc, i64 0, i64 2
  %80 = load i32* %79, align 4
  %81 = add nsw i32 %78, %80
  store i32 %81, i32* %c, align 4
  %82 = load i32* %i, align 4
  %83 = load i32* %c, align 4
  %84 = sext i32 %83 to i64
  %85 = getelementptr inbounds [100000 x i32]* @head, i64 0, i64 %84
  %86 = load i32* %85, align 4
  %87 = sext i32 %82 to i64
  %88 = getelementptr inbounds [200000 x i32]* @lscl, i64 0, i64 %87
  store i32 %86, i32* %88, align 4
  %89 = load i32* %c, align 4
  %90 = sext i32 %89 to i64
  %91 = getelementptr inbounds [100000 x i32]* @head, i64 0, i64 %90
  %92 = load i32* %i, align 4
  store i32 %92, i32* %91, align 4
  %93 = load i32* %i, align 4
  %94 = add nsw i32 %93, 1
  store i32 %94, i32* %i, align 4
  br label %bb16

bb16:                                             ; preds = %bb15, %bb11
  %95 = load i32* @n, align 4
  %96 = load i32* @nb, align 4
  %97 = add nsw i32 %95, %96
  %98 = load i32* %i, align 4
  %99 = icmp sgt i32 %97, %98
  br i1 %99, label %bb12, label %bb17

bb17:                                             ; preds = %bb16
  store double 6.250000e+00, double* %rrCut, align 8
  %100 = getelementptr inbounds [3 x i32]* %mc, i64 0, i64 0
  store i32 1, i32* %100, align 4
  br label %bb56

bb18:                                             ; preds = %bb56
  %101 = getelementptr inbounds [3 x i32]* %mc, i64 0, i64 1
  store i32 1, i32* %101, align 4
  br label %bb54

bb19:                                             ; preds = %bb54
  %102 = getelementptr inbounds [3 x i32]* %mc, i64 0, i64 2
  store i32 1, i32* %102, align 4
  br label %bb52

bb20:                                             ; preds = %bb52
  %103 = getelementptr inbounds [3 x i32]* %mc, i64 0, i64 0
  %104 = load i32* %103, align 4
  %105 = load i32* %lcyz2, align 4
  %106 = mul nsw i32 %104, %105
  %107 = getelementptr inbounds [3 x i32]* %mc, i64 0, i64 1
  %108 = load i32* %107, align 4
  %109 = getelementptr inbounds [3 x i32]* %lc2, i64 0, i64 2
  %110 = load i32* %109, align 4
  %111 = mul nsw i32 %108, %110
  %112 = add nsw i32 %106, %111
  %113 = getelementptr inbounds [3 x i32]* %mc, i64 0, i64 2
  %114 = load i32* %113, align 4
  %115 = add nsw i32 %112, %114
  store i32 %115, i32* %c, align 4
  %116 = load i32* %c, align 4
  %117 = sext i32 %116 to i64
  %118 = getelementptr inbounds [100000 x i32]* @head, i64 0, i64 %117
  %119 = load i32* %118, align 4
  %120 = icmp eq i32 %119, -1
  br i1 %120, label %bb51, label %bb21

bb21:                                             ; preds = %bb20
  %121 = getelementptr inbounds [3 x i32]* %mc, i64 0, i64 0
  %122 = load i32* %121, align 4
  %123 = sub nsw i32 %122, 1
  %124 = getelementptr inbounds [3 x i32]* %mc1, i64 0, i64 0
  store i32 %123, i32* %124, align 4
  br label %bb50

bb22:                                             ; preds = %bb50
  %125 = getelementptr inbounds [3 x i32]* %mc, i64 0, i64 1
  %126 = load i32* %125, align 4
  %127 = sub nsw i32 %126, 1
  %128 = getelementptr inbounds [3 x i32]* %mc1, i64 0, i64 1
  store i32 %127, i32* %128, align 4
  br label %bb48

bb23:                                             ; preds = %bb48
  %129 = getelementptr inbounds [3 x i32]* %mc, i64 0, i64 2
  %130 = load i32* %129, align 4
  %131 = sub nsw i32 %130, 1
  %132 = getelementptr inbounds [3 x i32]* %mc1, i64 0, i64 2
  store i32 %131, i32* %132, align 4
  br label %bb46

bb24:                                             ; preds = %bb46
  %133 = getelementptr inbounds [3 x i32]* %mc1, i64 0, i64 0
  %134 = load i32* %133, align 4
  %135 = load i32* %lcyz2, align 4
  %136 = mul nsw i32 %134, %135
  %137 = getelementptr inbounds [3 x i32]* %mc1, i64 0, i64 1
  %138 = load i32* %137, align 4
  %139 = getelementptr inbounds [3 x i32]* %lc2, i64 0, i64 2
  %140 = load i32* %139, align 4
  %141 = mul nsw i32 %138, %140
  %142 = add nsw i32 %136, %141
  %143 = getelementptr inbounds [3 x i32]* %mc1, i64 0, i64 2
  %144 = load i32* %143, align 4
  %145 = add nsw i32 %142, %144
  store i32 %145, i32* %c1, align 4
  %146 = load i32* %c1, align 4
  %147 = sext i32 %146 to i64
  %148 = getelementptr inbounds [100000 x i32]* @head, i64 0, i64 %147
  %149 = load i32* %148, align 4
  %150 = icmp eq i32 %149, -1
  br i1 %150, label %bb45, label %bb25

bb25:                                             ; preds = %bb24
  %151 = load i32* %c, align 4
  %152 = sext i32 %151 to i64
  %153 = getelementptr inbounds [100000 x i32]* @head, i64 0, i64 %152
  %154 = load i32* %153, align 4
  store i32 %154, i32* %i, align 4
  br label %bb44

bb26:                                             ; preds = %bb44
  %155 = load i32* %c1, align 4
  %156 = sext i32 %155 to i64
  %157 = getelementptr inbounds [100000 x i32]* @head, i64 0, i64 %156
  %158 = load i32* %157, align 4
  store i32 %158, i32* %j, align 4
  br label %bb42

bb27:                                             ; preds = %bb42
  %159 = load i32* %j, align 4
  %160 = load i32* %i, align 4
  %161 = icmp ne i32 %159, %160
  br i1 %161, label %bb28, label %bb41

bb28:                                             ; preds = %bb27
  %162 = load i32* @n, align 4
  %163 = load i32* %j, align 4
  %164 = icmp slt i32 %163, %162
  %165 = zext i1 %164 to i32
  store i32 %165, i32* %bintra, align 4
  store double 0.000000e+00, double* %rr, align 8
  store i32 0, i32* %a, align 4
  br label %bb30

bb29:                                             ; preds = %bb30
  %166 = load i32* %a, align 4
  %167 = load i32* %i, align 4
  %168 = load i32* %a, align 4
  %169 = sext i32 %167 to i64
  %170 = getelementptr inbounds [200000 x [3 x double]]* @r, i64 0, i64 %169
  %171 = sext i32 %168 to i64
  %172 = getelementptr inbounds [3 x double]* %170, i64 0, i64 %171
  %173 = load double* %172, align 8
  %174 = load i32* %j, align 4
  %175 = load i32* %a, align 4
  %176 = sext i32 %174 to i64
  %177 = getelementptr inbounds [200000 x [3 x double]]* @r, i64 0, i64 %176
  %178 = sext i32 %175 to i64
  %179 = getelementptr inbounds [3 x double]* %177, i64 0, i64 %178
  %180 = load double* %179, align 8
  %181 = fsub double %173, %180
  %182 = sext i32 %166 to i64
  %183 = getelementptr inbounds [3 x double]* %dr, i64 0, i64 %182
  store double %181, double* %183, align 8
  %184 = load i32* %a, align 4
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds [3 x double]* %dr, i64 0, i64 %185
  %187 = load double* %186, align 8
  %188 = load i32* %a, align 4
  %189 = sext i32 %188 to i64
  %190 = getelementptr inbounds [3 x double]* %dr, i64 0, i64 %189
  %191 = load double* %190, align 8
  %192 = fmul double %187, %191
  %193 = load double* %rr, align 8
  %194 = fadd double %192, %193
  store double %194, double* %rr, align 8
  %195 = load i32* %a, align 4
  %196 = add nsw i32 %195, 1
  store i32 %196, i32* %a, align 4
  br label %bb30

bb30:                                             ; preds = %bb29, %bb28
  %197 = load i32* %a, align 4
  %198 = icmp sle i32 %197, 2
  br i1 %198, label %bb29, label %bb31

bb31:                                             ; preds = %bb30
  %199 = load i32* %i, align 4
  %200 = load i32* %j, align 4
  %201 = icmp slt i32 %199, %200
  br i1 %201, label %bb32, label %bb41

bb32:                                             ; preds = %bb31
  %202 = load double* %rr, align 8
  %203 = load double* %rrCut, align 8
  %204 = fcmp olt double %202, %203
  br i1 %204, label %bb33, label %bb41

bb33:                                             ; preds = %bb32
  %205 = load double* %rr, align 8
  %206 = fdiv double 1.000000e+00, %205
  store double %206, double* %ri2, align 8
  %207 = load double* %ri2, align 8
  %208 = load double* %ri2, align 8
  %209 = fmul double %207, %208
  %210 = load double* %ri2, align 8
  %211 = fmul double %209, %210
  store double %211, double* %ri6, align 8
  %212 = load double* %rr, align 8
  %213 = call double @sqrt(double %212) nounwind readonly
  store double %213, double* %r1, align 8
  %214 = load double* %ri2, align 8
  %215 = fmul double %214, 4.800000e+01
  %216 = load double* %ri6, align 8
  %217 = fmul double %215, %216
  %218 = load double* %ri6, align 8
  %219 = fsub double %218, 5.000000e-01
  %220 = fmul double %217, %219
  %221 = load double* @Duc, align 8
  %222 = load double* %r1, align 8
  %223 = fdiv double %221, %222
  %224 = fadd double %220, %223
  store double %224, double* %fcVal, align 8
  %225 = load double* %ri6, align 8
  %226 = fmul double %225, 4.000000e+00
  %227 = load double* %ri6, align 8
  %228 = fsub double %227, 1.000000e+00
  %229 = fmul double %226, %228
  %230 = load double* @Uc, align 8
  %231 = fsub double %229, %230
  %232 = load double* %r1, align 8
  %233 = fsub double %232, 2.500000e+00
  %234 = load double* @Duc, align 8
  %235 = fmul double %233, %234
  %236 = fsub double %231, %235
  store double %236, double* %vVal, align 8
  %237 = load i32* %bintra, align 4
  %238 = icmp ne i32 %237, 0
  br i1 %238, label %bb34, label %bb35

bb34:                                             ; preds = %bb33
  %239 = load double* %lpe, align 8
  %240 = load double* %vVal, align 8
  %241 = fadd double %239, %240
  store double %241, double* %lpe, align 8
  br label %bb36

bb35:                                             ; preds = %bb33
  %242 = load double* %vVal, align 8
  %243 = fmul double %242, 5.000000e-01
  %244 = load double* %lpe, align 8
  %245 = fadd double %243, %244
  store double %245, double* %lpe, align 8
  br label %bb36

bb36:                                             ; preds = %bb35, %bb34
  store i32 0, i32* %a, align 4
  br label %bb40

bb37:                                             ; preds = %bb40
  %246 = load i32* %a, align 4
  %247 = sext i32 %246 to i64
  %248 = getelementptr inbounds [3 x double]* %dr, i64 0, i64 %247
  %249 = load double* %248, align 8
  %250 = load double* %fcVal, align 8
  %251 = fmul double %249, %250
  store double %251, double* %f, align 8
  %252 = load i32* %i, align 4
  %253 = load i32* %a, align 4
  %254 = load i32* %i, align 4
  %255 = load i32* %a, align 4
  %256 = sext i32 %254 to i64
  %257 = getelementptr inbounds [100000 x [3 x double]]* @ra, i64 0, i64 %256
  %258 = sext i32 %255 to i64
  %259 = getelementptr inbounds [3 x double]* %257, i64 0, i64 %258
  %260 = load double* %259, align 8
  %261 = load double* %f, align 8
  %262 = fadd double %260, %261
  %263 = sext i32 %252 to i64
  %264 = getelementptr inbounds [100000 x [3 x double]]* @ra, i64 0, i64 %263
  %265 = sext i32 %253 to i64
  %266 = getelementptr inbounds [3 x double]* %264, i64 0, i64 %265
  store double %262, double* %266, align 8
  %267 = load i32* %bintra, align 4
  %268 = icmp ne i32 %267, 0
  br i1 %268, label %bb38, label %bb39

bb38:                                             ; preds = %bb37
  %269 = load i32* %j, align 4
  %270 = load i32* %a, align 4
  %271 = load i32* %j, align 4
  %272 = load i32* %a, align 4
  %273 = sext i32 %271 to i64
  %274 = getelementptr inbounds [100000 x [3 x double]]* @ra, i64 0, i64 %273
  %275 = sext i32 %272 to i64
  %276 = getelementptr inbounds [3 x double]* %274, i64 0, i64 %275
  %277 = load double* %276, align 8
  %278 = load double* %f, align 8
  %279 = fsub double %277, %278
  %280 = sext i32 %269 to i64
  %281 = getelementptr inbounds [100000 x [3 x double]]* @ra, i64 0, i64 %280
  %282 = sext i32 %270 to i64
  %283 = getelementptr inbounds [3 x double]* %281, i64 0, i64 %282
  store double %279, double* %283, align 8
  br label %bb39

bb39:                                             ; preds = %bb38, %bb37
  %284 = load i32* %a, align 4
  %285 = add nsw i32 %284, 1
  store i32 %285, i32* %a, align 4
  br label %bb40

bb40:                                             ; preds = %bb39, %bb36
  %286 = load i32* %a, align 4
  %287 = icmp sle i32 %286, 2
  br i1 %287, label %bb37, label %bb41

bb41:                                             ; preds = %bb40, %bb32, %bb31, %bb27
  %288 = load i32* %j, align 4
  %289 = sext i32 %288 to i64
  %290 = getelementptr inbounds [200000 x i32]* @lscl, i64 0, i64 %289
  %291 = load i32* %290, align 4
  store i32 %291, i32* %j, align 4
  br label %bb42

bb42:                                             ; preds = %bb41, %bb26
  %292 = load i32* %j, align 4
  %293 = icmp ne i32 %292, -1
  br i1 %293, label %bb27, label %bb43

bb43:                                             ; preds = %bb42
  %294 = load i32* %i, align 4
  %295 = sext i32 %294 to i64
  %296 = getelementptr inbounds [200000 x i32]* @lscl, i64 0, i64 %295
  %297 = load i32* %296, align 4
  store i32 %297, i32* %i, align 4
  br label %bb44

bb44:                                             ; preds = %bb43, %bb25
  %298 = load i32* %i, align 4
  %299 = icmp ne i32 %298, -1
  br i1 %299, label %bb26, label %bb45

bb45:                                             ; preds = %bb44, %bb24
  %300 = getelementptr inbounds [3 x i32]* %mc1, i64 0, i64 2
  %301 = load i32* %300, align 4
  %302 = add nsw i32 %301, 1
  %303 = getelementptr inbounds [3 x i32]* %mc1, i64 0, i64 2
  store i32 %302, i32* %303, align 4
  br label %bb46

bb46:                                             ; preds = %bb45, %bb23
  %304 = getelementptr inbounds [3 x i32]* %mc1, i64 0, i64 2
  %305 = load i32* %304, align 4
  %306 = getelementptr inbounds [3 x i32]* %mc, i64 0, i64 2
  %307 = load i32* %306, align 4
  %308 = add nsw i32 %307, 1
  %309 = icmp sle i32 %305, %308
  br i1 %309, label %bb24, label %bb47

bb47:                                             ; preds = %bb46
  %310 = getelementptr inbounds [3 x i32]* %mc1, i64 0, i64 1
  %311 = load i32* %310, align 4
  %312 = add nsw i32 %311, 1
  %313 = getelementptr inbounds [3 x i32]* %mc1, i64 0, i64 1
  store i32 %312, i32* %313, align 4
  br label %bb48

bb48:                                             ; preds = %bb47, %bb22
  %314 = getelementptr inbounds [3 x i32]* %mc1, i64 0, i64 1
  %315 = load i32* %314, align 4
  %316 = getelementptr inbounds [3 x i32]* %mc, i64 0, i64 1
  %317 = load i32* %316, align 4
  %318 = add nsw i32 %317, 1
  %319 = icmp sle i32 %315, %318
  br i1 %319, label %bb23, label %bb49

bb49:                                             ; preds = %bb48
  %320 = getelementptr inbounds [3 x i32]* %mc1, i64 0, i64 0
  %321 = load i32* %320, align 4
  %322 = add nsw i32 %321, 1
  %323 = getelementptr inbounds [3 x i32]* %mc1, i64 0, i64 0
  store i32 %322, i32* %323, align 4
  br label %bb50

bb50:                                             ; preds = %bb49, %bb21
  %324 = getelementptr inbounds [3 x i32]* %mc1, i64 0, i64 0
  %325 = load i32* %324, align 4
  %326 = getelementptr inbounds [3 x i32]* %mc, i64 0, i64 0
  %327 = load i32* %326, align 4
  %328 = add nsw i32 %327, 1
  %329 = icmp sle i32 %325, %328
  br i1 %329, label %bb22, label %bb51

bb51:                                             ; preds = %bb50, %bb20
  %330 = getelementptr inbounds [3 x i32]* %mc, i64 0, i64 2
  %331 = load i32* %330, align 4
  %332 = add nsw i32 %331, 1
  %333 = getelementptr inbounds [3 x i32]* %mc, i64 0, i64 2
  store i32 %332, i32* %333, align 4
  br label %bb52

bb52:                                             ; preds = %bb51, %bb19
  %334 = getelementptr inbounds [3 x i32]* %mc, i64 0, i64 2
  %335 = load i32* %334, align 4
  %336 = load i32* getelementptr inbounds ([3 x i32]* @lc, i64 0, i64 2), align 4
  %337 = icmp sle i32 %335, %336
  br i1 %337, label %bb20, label %bb53

bb53:                                             ; preds = %bb52
  %338 = getelementptr inbounds [3 x i32]* %mc, i64 0, i64 1
  %339 = load i32* %338, align 4
  %340 = add nsw i32 %339, 1
  %341 = getelementptr inbounds [3 x i32]* %mc, i64 0, i64 1
  store i32 %340, i32* %341, align 4
  br label %bb54

bb54:                                             ; preds = %bb53, %bb18
  %342 = getelementptr inbounds [3 x i32]* %mc, i64 0, i64 1
  %343 = load i32* %342, align 4
  %344 = load i32* getelementptr inbounds ([3 x i32]* @lc, i64 0, i64 1), align 4
  %345 = icmp sle i32 %343, %344
  br i1 %345, label %bb19, label %bb55

bb55:                                             ; preds = %bb54
  %346 = getelementptr inbounds [3 x i32]* %mc, i64 0, i64 0
  %347 = load i32* %346, align 4
  %348 = add nsw i32 %347, 1
  %349 = getelementptr inbounds [3 x i32]* %mc, i64 0, i64 0
  store i32 %348, i32* %349, align 4
  br label %bb56

bb56:                                             ; preds = %bb55, %bb17
  %350 = getelementptr inbounds [3 x i32]* %mc, i64 0, i64 0
  %351 = load i32* %350, align 4
  %352 = load i32* getelementptr inbounds ([3 x i32]* @lc, i64 0, i64 0), align 4
  %353 = icmp sle i32 %351, %352
  br i1 %353, label %bb18, label %bb57

bb57:                                             ; preds = %bb56
  %354 = call double @MPI_Wtime() nounwind
  store double %354, double* %allreduce1, align 8
  %lpe58 = bitcast double* %lpe to i8*
  %355 = call i32 @MPI_Allreduce(i8* %lpe58, i8* bitcast (double* @potEnergy to i8*), i32 1, i32 1275070475, i32 1476395011, i32 1140850688) nounwind
  %356 = call double @MPI_Wtime() nounwind
  %357 = load double* %allreduce1, align 8
  %358 = fsub double %356, %357
  %359 = load double* @allreduce, align 8
  %360 = fadd double %358, %359
  store double %360, double* @allreduce, align 8
  br label %return

return:                                           ; preds = %bb57
  ret void
}

define void @eval_props() nounwind {
entry:
  %vv = alloca double
  %lke = alloca double
  %i = alloca i32
  %a = alloca i32
  %allreduce1 = alloca double
  %"alloca point" = bitcast i32 0 to i32
  store double 0.000000e+00, double* %lke, align 8
  store i32 0, i32* %i, align 4
  br label %bb4

bb:                                               ; preds = %bb4
  store double 0.000000e+00, double* %vv, align 8
  store i32 0, i32* %a, align 4
  br label %bb2

bb1:                                              ; preds = %bb2
  %0 = load i32* %i, align 4
  %1 = load i32* %a, align 4
  %2 = sext i32 %0 to i64
  %3 = getelementptr inbounds [200000 x [3 x double]]* @rv, i64 0, i64 %2
  %4 = sext i32 %1 to i64
  %5 = getelementptr inbounds [3 x double]* %3, i64 0, i64 %4
  %6 = load double* %5, align 8
  %7 = load i32* %i, align 4
  %8 = load i32* %a, align 4
  %9 = sext i32 %7 to i64
  %10 = getelementptr inbounds [200000 x [3 x double]]* @rv, i64 0, i64 %9
  %11 = sext i32 %8 to i64
  %12 = getelementptr inbounds [3 x double]* %10, i64 0, i64 %11
  %13 = load double* %12, align 8
  %14 = fmul double %6, %13
  %15 = load double* %vv, align 8
  %16 = fadd double %14, %15
  store double %16, double* %vv, align 8
  %17 = load i32* %a, align 4
  %18 = add nsw i32 %17, 1
  store i32 %18, i32* %a, align 4
  br label %bb2

bb2:                                              ; preds = %bb1, %bb
  %19 = load i32* %a, align 4
  %20 = icmp sle i32 %19, 2
  br i1 %20, label %bb1, label %bb3

bb3:                                              ; preds = %bb2
  %21 = load double* %lke, align 8
  %22 = load double* %vv, align 8
  %23 = fadd double %21, %22
  store double %23, double* %lke, align 8
  %24 = load i32* %i, align 4
  %25 = add nsw i32 %24, 1
  store i32 %25, i32* %i, align 4
  br label %bb4

bb4:                                              ; preds = %bb3, %entry
  %26 = load i32* @n, align 4
  %27 = load i32* %i, align 4
  %28 = icmp slt i32 %27, %26
  br i1 %28, label %bb, label %bb5

bb5:                                              ; preds = %bb4
  %29 = load double* %lke, align 8
  %30 = fmul double %29, 5.000000e-01
  store double %30, double* %lke, align 8
  %31 = call double @MPI_Wtime() nounwind
  store double %31, double* %allreduce1, align 8
  %lke6 = bitcast double* %lke to i8*
  %32 = call i32 @MPI_Allreduce(i8* %lke6, i8* bitcast (double* @kinEnergy to i8*), i32 1, i32 1275070475, i32 1476395011, i32 1140850688) nounwind
  %33 = call double @MPI_Wtime() nounwind
  %34 = load double* %allreduce1, align 8
  %35 = fsub double %33, %34
  %36 = load double* @allreduce, align 8
  %37 = fadd double %35, %36
  store double %37, double* @allreduce, align 8
  %38 = load double* @kinEnergy, align 8
  %39 = load i32* @nglob, align 4
  %40 = sitofp i32 %39 to double
  %41 = fdiv double %38, %40
  store double %41, double* @kinEnergy, align 8
  %42 = load double* @potEnergy, align 8
  %43 = load i32* @nglob, align 4
  %44 = sitofp i32 %43 to double
  %45 = fdiv double %42, %44
  store double %45, double* @potEnergy, align 8
  %46 = load double* @kinEnergy, align 8
  %47 = load double* @potEnergy, align 8
  %48 = fadd double %46, %47
  store double %48, double* @totEnergy, align 8
  %49 = load double* @kinEnergy, align 8
  %50 = fmul double %49, 2.000000e+00
  %51 = fdiv double %50, 3.000000e+00
  store double %51, double* @temperature, align 8
  %52 = load i32* @sid, align 4
  %53 = icmp eq i32 %52, 0
  br i1 %53, label %bb7, label %bb8

bb7:                                              ; preds = %bb5
  %54 = load double* @totEnergy, align 8
  %55 = load double* @potEnergy, align 8
  %56 = load double* @temperature, align 8
  %57 = load i32* @stepCount, align 4
  %58 = sitofp i32 %57 to double
  %59 = load double* @DeltaT, align 8
  %60 = fmul double %58, %59
  %61 = call i32 (i8*, ...)* @printf(i8* noalias getelementptr inbounds ([25 x i8]* @.str10, i64 0, i64 0), double %60, double %56, double %55, double %54) nounwind
  br label %bb8

bb8:                                              ; preds = %bb7, %bb5
  br label %return

return:                                           ; preds = %bb8
  ret void
}

define void @atom_move() nounwind {
entry:
  %mvque = alloca [6 x [100000 x i32]]
  %newim = alloca i32
  %ku = alloca i32
  %kd = alloca i32
  %i = alloca i32
  %kdd = alloca i32
  %kul = alloca i32
  %kuh = alloca i32
  %inode = alloca i32
  %ipt = alloca i32
  %a = alloca i32
  %nsd = alloca i32
  %nrc = alloca i32
  %com1 = alloca double
  %"alloca point" = bitcast i32 0 to i32
  store i32 0, i32* %newim, align 4
  store i32 0, i32* %ku, align 4
  br label %bb1

bb:                                               ; preds = %bb1
  %0 = load i32* %ku, align 4
  %1 = sext i32 %0 to i64
  %2 = getelementptr inbounds [6 x [100000 x i32]]* %mvque, i64 0, i64 %1
  %3 = getelementptr inbounds [100000 x i32]* %2, i64 0, i64 0
  store i32 0, i32* %3, align 4
  %4 = load i32* %ku, align 4
  %5 = add nsw i32 %4, 1
  store i32 %5, i32* %ku, align 4
  br label %bb1

bb1:                                              ; preds = %bb, %entry
  %6 = load i32* %ku, align 4
  %7 = icmp sle i32 %6, 5
  br i1 %7, label %bb, label %bb2

bb2:                                              ; preds = %bb1
  store i32 0, i32* %kd, align 4
  br label %bb43

bb3:                                              ; preds = %bb43
  store i32 0, i32* %i, align 4
  br label %bb10

bb4:                                              ; preds = %bb10
  %8 = load i32* %kd, align 4
  %9 = mul nsw i32 %8, 2
  store i32 %9, i32* %kul, align 4
  %10 = load i32* %kd, align 4
  %11 = mul nsw i32 %10, 2
  %12 = add nsw i32 %11, 1
  store i32 %12, i32* %kuh, align 4
  %13 = load i32* %i, align 4
  %14 = sext i32 %13 to i64
  %15 = getelementptr inbounds [200000 x [3 x double]]* @r, i64 0, i64 %14
  %16 = getelementptr inbounds [3 x double]* %15, i64 0, i64 0
  %17 = load double* %16, align 8
  %18 = fcmp ogt double %17, -1.000000e+10
  br i1 %18, label %bb5, label %bb9

bb5:                                              ; preds = %bb4
  %19 = load i32* %i, align 4
  %20 = sext i32 %19 to i64
  %21 = getelementptr inbounds [200000 x [3 x double]]* @r, i64 0, i64 %20
  %22 = getelementptr inbounds [3 x double]* %21, i64 0, i64 0
  %23 = load i32* %kul, align 4
  %24 = call i32 @bmv(double* %22, i32 %23) nounwind
  %25 = icmp ne i32 %24, 0
  br i1 %25, label %bb6, label %bb7

bb6:                                              ; preds = %bb5
  %26 = load i32* %kul, align 4
  %27 = load i32* %kul, align 4
  %28 = sext i32 %27 to i64
  %29 = getelementptr inbounds [6 x [100000 x i32]]* %mvque, i64 0, i64 %28
  %30 = getelementptr inbounds [100000 x i32]* %29, i64 0, i64 0
  %31 = load i32* %30, align 4
  %32 = add nsw i32 %31, 1
  %33 = sext i32 %27 to i64
  %34 = getelementptr inbounds [6 x [100000 x i32]]* %mvque, i64 0, i64 %33
  %35 = getelementptr inbounds [100000 x i32]* %34, i64 0, i64 0
  store i32 %32, i32* %35, align 4
  %36 = sext i32 %27 to i64
  %37 = getelementptr inbounds [6 x [100000 x i32]]* %mvque, i64 0, i64 %36
  %38 = getelementptr inbounds [100000 x i32]* %37, i64 0, i64 0
  %39 = load i32* %38, align 4
  %40 = sext i32 %26 to i64
  %41 = getelementptr inbounds [6 x [100000 x i32]]* %mvque, i64 0, i64 %40
  %42 = sext i32 %39 to i64
  %43 = getelementptr inbounds [100000 x i32]* %41, i64 0, i64 %42
  %44 = load i32* %i, align 4
  store i32 %44, i32* %43, align 4
  br label %bb9

bb7:                                              ; preds = %bb5
  %45 = load i32* %i, align 4
  %46 = sext i32 %45 to i64
  %47 = getelementptr inbounds [200000 x [3 x double]]* @r, i64 0, i64 %46
  %48 = getelementptr inbounds [3 x double]* %47, i64 0, i64 0
  %49 = load i32* %kuh, align 4
  %50 = call i32 @bmv(double* %48, i32 %49) nounwind
  %51 = icmp ne i32 %50, 0
  br i1 %51, label %bb8, label %bb9

bb8:                                              ; preds = %bb7
  %52 = load i32* %kuh, align 4
  %53 = load i32* %kuh, align 4
  %54 = sext i32 %53 to i64
  %55 = getelementptr inbounds [6 x [100000 x i32]]* %mvque, i64 0, i64 %54
  %56 = getelementptr inbounds [100000 x i32]* %55, i64 0, i64 0
  %57 = load i32* %56, align 4
  %58 = add nsw i32 %57, 1
  %59 = sext i32 %53 to i64
  %60 = getelementptr inbounds [6 x [100000 x i32]]* %mvque, i64 0, i64 %59
  %61 = getelementptr inbounds [100000 x i32]* %60, i64 0, i64 0
  store i32 %58, i32* %61, align 4
  %62 = sext i32 %53 to i64
  %63 = getelementptr inbounds [6 x [100000 x i32]]* %mvque, i64 0, i64 %62
  %64 = getelementptr inbounds [100000 x i32]* %63, i64 0, i64 0
  %65 = load i32* %64, align 4
  %66 = sext i32 %52 to i64
  %67 = getelementptr inbounds [6 x [100000 x i32]]* %mvque, i64 0, i64 %66
  %68 = sext i32 %65 to i64
  %69 = getelementptr inbounds [100000 x i32]* %67, i64 0, i64 %68
  %70 = load i32* %i, align 4
  store i32 %70, i32* %69, align 4
  br label %bb9

bb9:                                              ; preds = %bb8, %bb7, %bb6, %bb4
  %71 = load i32* %i, align 4
  %72 = add nsw i32 %71, 1
  store i32 %72, i32* %i, align 4
  br label %bb10

bb10:                                             ; preds = %bb9, %bb3
  %73 = load i32* @n, align 4
  %74 = load i32* %newim, align 4
  %75 = add nsw i32 %73, %74
  %76 = load i32* %i, align 4
  %77 = icmp sgt i32 %75, %76
  br i1 %77, label %bb4, label %bb11

bb11:                                             ; preds = %bb10
  %78 = call double @MPI_Wtime() nounwind
  store double %78, double* %com1, align 8
  store i32 0, i32* %kdd, align 4
  br label %bb41

bb12:                                             ; preds = %bb41
  %79 = load i32* %kd, align 4
  %80 = mul nsw i32 %79, 2
  %81 = load i32* %kdd, align 4
  %82 = add nsw i32 %80, %81
  store i32 %82, i32* %ku, align 4
  %83 = load i32* %ku, align 4
  %84 = sext i32 %83 to i64
  %85 = getelementptr inbounds [6 x i32]* @nn, i64 0, i64 %84
  %86 = load i32* %85, align 4
  store i32 %86, i32* %inode, align 4
  %87 = load i32* %ku, align 4
  %88 = sext i32 %87 to i64
  %89 = getelementptr inbounds [6 x [100000 x i32]]* %mvque, i64 0, i64 %88
  %90 = getelementptr inbounds [100000 x i32]* %89, i64 0, i64 0
  %91 = load i32* %90, align 4
  store i32 %91, i32* %nsd, align 4
  %92 = load i32* %kd, align 4
  %93 = sext i32 %92 to i64
  %94 = getelementptr inbounds [3 x i32]* @myparity, i64 0, i64 %93
  %95 = load i32* %94, align 4
  %96 = icmp eq i32 %95, 0
  br i1 %96, label %bb13, label %bb16

bb13:                                             ; preds = %bb12
  %nsd14 = bitcast i32* %nsd to i8*
  %97 = load i32* %inode, align 4
  %98 = call i32 @MPI_Send(i8* %nsd14, i32 1, i32 1275069445, i32 %97, i32 110, i32 1140850688) nounwind
  %nrc15 = bitcast i32* %nrc to i8*
  %99 = call i32 @MPI_Recv(i8* %nrc15, i32 1, i32 1275069445, i32 -2, i32 110, i32 1140850688, %struct.MPI_Status* @status) nounwind
  br label %bb21

bb16:                                             ; preds = %bb12
  %100 = load i32* %kd, align 4
  %101 = sext i32 %100 to i64
  %102 = getelementptr inbounds [3 x i32]* @myparity, i64 0, i64 %101
  %103 = load i32* %102, align 4
  %104 = icmp eq i32 %103, 1
  br i1 %104, label %bb17, label %bb20

bb17:                                             ; preds = %bb16
  %nrc18 = bitcast i32* %nrc to i8*
  %105 = call i32 @MPI_Recv(i8* %nrc18, i32 1, i32 1275069445, i32 -2, i32 110, i32 1140850688, %struct.MPI_Status* @status) nounwind
  %nsd19 = bitcast i32* %nsd to i8*
  %106 = load i32* %inode, align 4
  %107 = call i32 @MPI_Send(i8* %nsd19, i32 1, i32 1275069445, i32 %106, i32 110, i32 1140850688) nounwind
  br label %bb21

bb20:                                             ; preds = %bb16
  %108 = load i32* %nsd, align 4
  store i32 %108, i32* %nrc, align 4
  br label %bb21

bb21:                                             ; preds = %bb20, %bb17, %bb13
  store i32 1, i32* %i, align 4
  br label %bb26

bb22:                                             ; preds = %bb26
  store i32 0, i32* %a, align 4
  br label %bb24

bb23:                                             ; preds = %bb24
  %109 = load i32* %i, align 4
  %110 = mul nsw i32 %109, 6
  %111 = add nsw i32 %110, -6
  %112 = load i32* %a, align 4
  %113 = add nsw i32 %111, %112
  %114 = load i32* %ku, align 4
  %115 = load i32* %i, align 4
  %116 = sext i32 %114 to i64
  %117 = getelementptr inbounds [6 x [100000 x i32]]* %mvque, i64 0, i64 %116
  %118 = sext i32 %115 to i64
  %119 = getelementptr inbounds [100000 x i32]* %117, i64 0, i64 %118
  %120 = load i32* %119, align 4
  %121 = load i32* %a, align 4
  %122 = sext i32 %120 to i64
  %123 = getelementptr inbounds [200000 x [3 x double]]* @r, i64 0, i64 %122
  %124 = sext i32 %121 to i64
  %125 = getelementptr inbounds [3 x double]* %123, i64 0, i64 %124
  %126 = load double* %125, align 8
  %127 = load i32* %ku, align 4
  %128 = load i32* %a, align 4
  %129 = sext i32 %127 to i64
  %130 = getelementptr inbounds [6 x [3 x double]]* @sv, i64 0, i64 %129
  %131 = sext i32 %128 to i64
  %132 = getelementptr inbounds [3 x double]* %130, i64 0, i64 %131
  %133 = load double* %132, align 8
  %134 = fsub double %126, %133
  %135 = sext i32 %113 to i64
  %136 = getelementptr inbounds [300000 x double]* @dbuf, i64 0, i64 %135
  store double %134, double* %136, align 8
  %137 = load i32* %i, align 4
  %138 = mul nsw i32 %137, 6
  %139 = add nsw i32 %138, -3
  %140 = load i32* %a, align 4
  %141 = add nsw i32 %139, %140
  %142 = load i32* %ku, align 4
  %143 = load i32* %i, align 4
  %144 = sext i32 %142 to i64
  %145 = getelementptr inbounds [6 x [100000 x i32]]* %mvque, i64 0, i64 %144
  %146 = sext i32 %143 to i64
  %147 = getelementptr inbounds [100000 x i32]* %145, i64 0, i64 %146
  %148 = load i32* %147, align 4
  %149 = load i32* %a, align 4
  %150 = sext i32 %148 to i64
  %151 = getelementptr inbounds [200000 x [3 x double]]* @rv, i64 0, i64 %150
  %152 = sext i32 %149 to i64
  %153 = getelementptr inbounds [3 x double]* %151, i64 0, i64 %152
  %154 = load double* %153, align 8
  %155 = sext i32 %141 to i64
  %156 = getelementptr inbounds [300000 x double]* @dbuf, i64 0, i64 %155
  store double %154, double* %156, align 8
  %157 = load i32* %ku, align 4
  %158 = load i32* %i, align 4
  %159 = sext i32 %157 to i64
  %160 = getelementptr inbounds [6 x [100000 x i32]]* %mvque, i64 0, i64 %159
  %161 = sext i32 %158 to i64
  %162 = getelementptr inbounds [100000 x i32]* %160, i64 0, i64 %161
  %163 = load i32* %162, align 4
  %164 = sext i32 %163 to i64
  %165 = getelementptr inbounds [200000 x [3 x double]]* @r, i64 0, i64 %164
  %166 = getelementptr inbounds [3 x double]* %165, i64 0, i64 0
  store double -1.000000e+10, double* %166, align 8
  %167 = load i32* %a, align 4
  %168 = add nsw i32 %167, 1
  store i32 %168, i32* %a, align 4
  br label %bb24

bb24:                                             ; preds = %bb23, %bb22
  %169 = load i32* %a, align 4
  %170 = icmp sle i32 %169, 2
  br i1 %170, label %bb23, label %bb25

bb25:                                             ; preds = %bb24
  %171 = load i32* %i, align 4
  %172 = add nsw i32 %171, 1
  store i32 %172, i32* %i, align 4
  br label %bb26

bb26:                                             ; preds = %bb25, %bb21
  %173 = load i32* %nsd, align 4
  %174 = load i32* %i, align 4
  %175 = icmp sle i32 %174, %173
  br i1 %175, label %bb22, label %bb27

bb27:                                             ; preds = %bb26
  %176 = load i32* %kd, align 4
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds [3 x i32]* @myparity, i64 0, i64 %177
  %179 = load i32* %178, align 4
  %180 = icmp eq i32 %179, 0
  br i1 %180, label %bb28, label %bb29

bb28:                                             ; preds = %bb27
  %181 = load i32* %nsd, align 4
  %182 = mul nsw i32 %181, 6
  %183 = load i32* %inode, align 4
  %184 = call i32 @MPI_Send(i8* bitcast ([300000 x double]* @dbuf to i8*), i32 %182, i32 1275070475, i32 %183, i32 120, i32 1140850688) nounwind
  %185 = load i32* %nrc, align 4
  %186 = mul nsw i32 %185, 6
  %187 = call i32 @MPI_Recv(i8* bitcast ([300000 x double]* @dbufr to i8*), i32 %186, i32 1275070475, i32 -2, i32 120, i32 1140850688, %struct.MPI_Status* @status) nounwind
  br label %bb34

bb29:                                             ; preds = %bb27
  %188 = load i32* %kd, align 4
  %189 = sext i32 %188 to i64
  %190 = getelementptr inbounds [3 x i32]* @myparity, i64 0, i64 %189
  %191 = load i32* %190, align 4
  %192 = icmp eq i32 %191, 1
  br i1 %192, label %bb30, label %bb31

bb30:                                             ; preds = %bb29
  %193 = load i32* %nrc, align 4
  %194 = mul nsw i32 %193, 6
  %195 = call i32 @MPI_Recv(i8* bitcast ([300000 x double]* @dbufr to i8*), i32 %194, i32 1275070475, i32 -2, i32 120, i32 1140850688, %struct.MPI_Status* @status) nounwind
  %196 = load i32* %nsd, align 4
  %197 = mul nsw i32 %196, 6
  %198 = load i32* %inode, align 4
  %199 = call i32 @MPI_Send(i8* bitcast ([300000 x double]* @dbuf to i8*), i32 %197, i32 1275070475, i32 %198, i32 120, i32 1140850688) nounwind
  br label %bb34

bb31:                                             ; preds = %bb29
  store i32 0, i32* %i, align 4
  br label %bb33

bb32:                                             ; preds = %bb33
  %200 = load i32* %i, align 4
  %201 = load i32* %i, align 4
  %202 = sext i32 %201 to i64
  %203 = getelementptr inbounds [300000 x double]* @dbuf, i64 0, i64 %202
  %204 = load double* %203, align 8
  %205 = sext i32 %200 to i64
  %206 = getelementptr inbounds [300000 x double]* @dbufr, i64 0, i64 %205
  store double %204, double* %206, align 8
  %207 = load i32* %i, align 4
  %208 = add nsw i32 %207, 1
  store i32 %208, i32* %i, align 4
  br label %bb33

bb33:                                             ; preds = %bb32, %bb31
  %209 = load i32* %nrc, align 4
  %210 = mul nsw i32 %209, 6
  %211 = load i32* %i, align 4
  %212 = icmp sgt i32 %210, %211
  br i1 %212, label %bb32, label %bb34

bb34:                                             ; preds = %bb33, %bb30, %bb28
  store i32 0, i32* %i, align 4
  br label %bb39

bb35:                                             ; preds = %bb39
  store i32 0, i32* %a, align 4
  br label %bb37

bb36:                                             ; preds = %bb37
  %213 = load i32* @n, align 4
  %214 = load i32* %newim, align 4
  %215 = add nsw i32 %213, %214
  %216 = load i32* %i, align 4
  %217 = add nsw i32 %215, %216
  %218 = load i32* %a, align 4
  %219 = load i32* %i, align 4
  %220 = mul nsw i32 %219, 6
  %221 = load i32* %a, align 4
  %222 = add nsw i32 %220, %221
  %223 = sext i32 %222 to i64
  %224 = getelementptr inbounds [300000 x double]* @dbufr, i64 0, i64 %223
  %225 = load double* %224, align 8
  %226 = sext i32 %217 to i64
  %227 = getelementptr inbounds [200000 x [3 x double]]* @r, i64 0, i64 %226
  %228 = sext i32 %218 to i64
  %229 = getelementptr inbounds [3 x double]* %227, i64 0, i64 %228
  store double %225, double* %229, align 8
  %230 = load i32* @n, align 4
  %231 = load i32* %newim, align 4
  %232 = add nsw i32 %230, %231
  %233 = load i32* %i, align 4
  %234 = add nsw i32 %232, %233
  %235 = load i32* %a, align 4
  %236 = load i32* %i, align 4
  %237 = mul nsw i32 %236, 6
  %238 = add nsw i32 %237, 3
  %239 = load i32* %a, align 4
  %240 = add nsw i32 %238, %239
  %241 = sext i32 %240 to i64
  %242 = getelementptr inbounds [300000 x double]* @dbufr, i64 0, i64 %241
  %243 = load double* %242, align 8
  %244 = sext i32 %234 to i64
  %245 = getelementptr inbounds [200000 x [3 x double]]* @rv, i64 0, i64 %244
  %246 = sext i32 %235 to i64
  %247 = getelementptr inbounds [3 x double]* %245, i64 0, i64 %246
  store double %243, double* %247, align 8
  %248 = load i32* %a, align 4
  %249 = add nsw i32 %248, 1
  store i32 %249, i32* %a, align 4
  br label %bb37

bb37:                                             ; preds = %bb36, %bb35
  %250 = load i32* %a, align 4
  %251 = icmp sle i32 %250, 2
  br i1 %251, label %bb36, label %bb38

bb38:                                             ; preds = %bb37
  %252 = load i32* %i, align 4
  %253 = add nsw i32 %252, 1
  store i32 %253, i32* %i, align 4
  br label %bb39

bb39:                                             ; preds = %bb38, %bb34
  %254 = load i32* %nrc, align 4
  %255 = load i32* %i, align 4
  %256 = icmp slt i32 %255, %254
  br i1 %256, label %bb35, label %bb40

bb40:                                             ; preds = %bb39
  %257 = load i32* %nrc, align 4
  %258 = load i32* %newim, align 4
  %259 = add nsw i32 %258, %257
  store i32 %259, i32* %newim, align 4
  %260 = call i32 @MPI_Barrier(i32 1140850688) nounwind
  %261 = load i32* %kdd, align 4
  %262 = add nsw i32 %261, 1
  store i32 %262, i32* %kdd, align 4
  br label %bb41

bb41:                                             ; preds = %bb40, %bb11
  %263 = load i32* %kdd, align 4
  %264 = icmp sle i32 %263, 1
  br i1 %264, label %bb12, label %bb42

bb42:                                             ; preds = %bb41
  %265 = call double @MPI_Wtime() nounwind
  %266 = load double* @comt, align 8
  %267 = fadd double %265, %266
  %268 = load double* %com1, align 8
  %269 = fsub double %267, %268
  store double %269, double* @comt, align 8
  %270 = load i32* %kd, align 4
  %271 = add nsw i32 %270, 1
  store i32 %271, i32* %kd, align 4
  br label %bb43

bb43:                                             ; preds = %bb42, %bb2
  %272 = load i32* %kd, align 4
  %273 = icmp sle i32 %272, 2
  br i1 %273, label %bb3, label %bb44

bb44:                                             ; preds = %bb43
  store i32 0, i32* %ipt, align 4
  store i32 0, i32* %i, align 4
  br label %bb51

bb45:                                             ; preds = %bb51
  %274 = load i32* %i, align 4
  %275 = sext i32 %274 to i64
  %276 = getelementptr inbounds [200000 x [3 x double]]* @r, i64 0, i64 %275
  %277 = getelementptr inbounds [3 x double]* %276, i64 0, i64 0
  %278 = load double* %277, align 8
  %279 = fcmp ogt double %278, -1.000000e+10
  br i1 %279, label %bb46, label %bb50

bb46:                                             ; preds = %bb45
  store i32 0, i32* %a, align 4
  br label %bb48

bb47:                                             ; preds = %bb48
  %280 = load i32* %ipt, align 4
  %281 = load i32* %a, align 4
  %282 = load i32* %i, align 4
  %283 = load i32* %a, align 4
  %284 = sext i32 %282 to i64
  %285 = getelementptr inbounds [200000 x [3 x double]]* @r, i64 0, i64 %284
  %286 = sext i32 %283 to i64
  %287 = getelementptr inbounds [3 x double]* %285, i64 0, i64 %286
  %288 = load double* %287, align 8
  %289 = sext i32 %280 to i64
  %290 = getelementptr inbounds [200000 x [3 x double]]* @r, i64 0, i64 %289
  %291 = sext i32 %281 to i64
  %292 = getelementptr inbounds [3 x double]* %290, i64 0, i64 %291
  store double %288, double* %292, align 8
  %293 = load i32* %ipt, align 4
  %294 = load i32* %a, align 4
  %295 = load i32* %i, align 4
  %296 = load i32* %a, align 4
  %297 = sext i32 %295 to i64
  %298 = getelementptr inbounds [200000 x [3 x double]]* @rv, i64 0, i64 %297
  %299 = sext i32 %296 to i64
  %300 = getelementptr inbounds [3 x double]* %298, i64 0, i64 %299
  %301 = load double* %300, align 8
  %302 = sext i32 %293 to i64
  %303 = getelementptr inbounds [200000 x [3 x double]]* @rv, i64 0, i64 %302
  %304 = sext i32 %294 to i64
  %305 = getelementptr inbounds [3 x double]* %303, i64 0, i64 %304
  store double %301, double* %305, align 8
  %306 = load i32* %a, align 4
  %307 = add nsw i32 %306, 1
  store i32 %307, i32* %a, align 4
  br label %bb48

bb48:                                             ; preds = %bb47, %bb46
  %308 = load i32* %a, align 4
  %309 = icmp sle i32 %308, 2
  br i1 %309, label %bb47, label %bb49

bb49:                                             ; preds = %bb48
  %310 = load i32* %ipt, align 4
  %311 = add nsw i32 %310, 1
  store i32 %311, i32* %ipt, align 4
  br label %bb50

bb50:                                             ; preds = %bb49, %bb45
  %312 = load i32* %i, align 4
  %313 = add nsw i32 %312, 1
  store i32 %313, i32* %i, align 4
  br label %bb51

bb51:                                             ; preds = %bb50, %bb44
  %314 = load i32* @n, align 4
  %315 = load i32* %newim, align 4
  %316 = add nsw i32 %314, %315
  %317 = load i32* %i, align 4
  %318 = icmp sgt i32 %316, %317
  br i1 %318, label %bb45, label %bb52

bb52:                                             ; preds = %bb51
  %319 = load i32* %ipt, align 4
  store i32 %319, i32* @n, align 4
  br label %return

return:                                           ; preds = %bb52
  ret void
}

define i32 @bbd(double* %ri, i32 %ku) nounwind {
entry:
  %ri_addr = alloca double*, align 8
  %ku_addr = alloca i32, align 4
  %retval = alloca i32
  %0 = alloca i32
  %kd = alloca i32
  %kdd = alloca i32
  %"alloca point" = bitcast i32 0 to i32
  store double* %ri, double** %ri_addr
  store i32 %ku, i32* %ku_addr
  %1 = load i32* %ku_addr, align 4
  %2 = sdiv i32 %1, 2
  store i32 %2, i32* %kd, align 4
  %3 = load i32* %ku_addr, align 4
  %4 = srem i32 %3, 2
  store i32 %4, i32* %kdd, align 4
  %5 = load i32* %kdd, align 4
  %6 = icmp eq i32 %5, 0
  br i1 %6, label %bb, label %bb1

bb:                                               ; preds = %entry
  %7 = load double** %ri_addr, align 8
  %8 = load i32* %kd, align 4
  %9 = sext i32 %8 to i64
  %10 = getelementptr inbounds double* %7, i64 %9
  %11 = load double* %10, align 1
  %12 = fcmp olt double %11, 2.500000e+00
  %13 = zext i1 %12 to i32
  store i32 %13, i32* %0, align 4
  br label %bb2

bb1:                                              ; preds = %entry
  %14 = load i32* %kd, align 4
  %15 = sext i32 %14 to i64
  %16 = getelementptr inbounds [3 x double]* @al, i64 0, i64 %15
  %17 = load double* %16, align 8
  %18 = fsub double %17, 2.500000e+00
  %19 = load double** %ri_addr, align 8
  %20 = load i32* %kd, align 4
  %21 = sext i32 %20 to i64
  %22 = getelementptr inbounds double* %19, i64 %21
  %23 = load double* %22, align 1
  %24 = fcmp olt double %18, %23
  %25 = zext i1 %24 to i32
  store i32 %25, i32* %0, align 4
  br label %bb2

bb2:                                              ; preds = %bb1, %bb
  %26 = load i32* %0, align 4
  store i32 %26, i32* %retval, align 4
  br label %return

return:                                           ; preds = %bb2
  %retval3 = load i32* %retval
  ret i32 %retval3
}

define i32 @bmv(double* %ri, i32 %ku) nounwind {
entry:
  %ri_addr = alloca double*, align 8
  %ku_addr = alloca i32, align 4
  %retval = alloca i32
  %0 = alloca i32
  %kd = alloca i32
  %kdd = alloca i32
  %"alloca point" = bitcast i32 0 to i32
  store double* %ri, double** %ri_addr
  store i32 %ku, i32* %ku_addr
  %1 = load i32* %ku_addr, align 4
  %2 = sdiv i32 %1, 2
  store i32 %2, i32* %kd, align 4
  %3 = load i32* %ku_addr, align 4
  %4 = srem i32 %3, 2
  store i32 %4, i32* %kdd, align 4
  %5 = load i32* %kdd, align 4
  %6 = icmp eq i32 %5, 0
  br i1 %6, label %bb, label %bb1

bb:                                               ; preds = %entry
  %7 = load double** %ri_addr, align 8
  %8 = load i32* %kd, align 4
  %9 = sext i32 %8 to i64
  %10 = getelementptr inbounds double* %7, i64 %9
  %11 = load double* %10, align 1
  %12 = fcmp olt double %11, 0.000000e+00
  %13 = zext i1 %12 to i32
  store i32 %13, i32* %0, align 4
  br label %bb2

bb1:                                              ; preds = %entry
  %14 = load i32* %kd, align 4
  %15 = sext i32 %14 to i64
  %16 = getelementptr inbounds [3 x double]* @al, i64 0, i64 %15
  %17 = load double* %16, align 8
  %18 = load double** %ri_addr, align 8
  %19 = load i32* %kd, align 4
  %20 = sext i32 %19 to i64
  %21 = getelementptr inbounds double* %18, i64 %20
  %22 = load double* %21, align 1
  %23 = fcmp olt double %17, %22
  %24 = zext i1 %23 to i32
  store i32 %24, i32* %0, align 4
  br label %bb2

bb2:                                              ; preds = %bb1, %bb
  %25 = load i32* %0, align 4
  store i32 %25, i32* %retval, align 4
  br label %return

return:                                           ; preds = %bb2
  %retval3 = load i32* %retval
  ret i32 %retval3
}
